diff --git a/.github/workflows/n8n.yml b/.github/workflows/n8n.yml index 8b4ab27cb..85b420ee2 100644 --- a/.github/workflows/n8n.yml +++ b/.github/workflows/n8n.yml @@ -116,6 +116,14 @@ jobs: - name: Generate n8n node run: bun run integrations/n8n/scripts/generate-n8n.ts + # The node files are committed, but nothing else verifies they match the + # spec: check-generated-sync.mjs deliberately excludes integrations/**. + # Without this, a spec change that regenerates the node leaves the commit + # stale, and check-release (which diffs HEAD~1) then reports no code + # change and silently skips the publish. + - name: n8n node is in sync with the spec + run: git diff --exit-code -- integrations/n8n/nodes integrations/n8n/credentials + - name: Check n8n release (changelog-driven) id: changes run: | diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index af5d7742d..b036ca8cf 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -99,21 +99,63 @@ jobs: run: bun run verify working-directory: sdk/typescript + # Each SDK keeps its examples in a sibling directory that the SDK build + # never touches, so a spec change that renames a type or adds a union + # member breaks the shipped examples silently. They are linked from the + # READMEs, so users hit it first — compile them here too. + - name: Typecheck TypeScript examples + if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.ts_changed == 'true' + run: bun run typecheck:examples + working-directory: sdk/typescript + - name: Compile Go SDK if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.go_changed == 'true' working-directory: sdk/go/generated run: go build ./... + - name: Compile Go examples + if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.go_changed == 'true' + working-directory: sdk/go/examples + # Every example is its own `package main` in one directory, so + # `go build ./...` only reports "main redeclared". Build them one at a + # time, the way a reader runs them. + run: for f in *.go; do go build -o /dev/null "$f" || exit 1; done + - name: Compile Kotlin SDK if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.kotlin_changed == 'true' working-directory: sdk/kotlin/generated run: ./gradlew compileKotlin -Pversion=0.0.0 + - name: Compile Kotlin examples + if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.kotlin_changed == 'true' + working-directory: sdk/kotlin/generated + run: ./gradlew compileExamplesKotlin -Pversion=0.0.0 + - name: Check Python SDK if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.python_changed == 'true' working-directory: sdk/python/generated run: python3 -m py_compile $(find pachca -name '*.py') + - name: Import Python SDK and examples + if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.python_changed == 'true' + working-directory: sdk/python + # py_compile only parses: a module-level NameError (a registry naming a + # type that was never imported, an example importing a model the spec no + # longer generates) compiles fine and blows up on import. Import for + # real, with httpx stubbed so the check needs no dependencies. + run: | + python3 -c ' + import sys, types, pathlib, importlib + stub = types.ModuleType("httpx") + stub.__getattr__ = lambda name: type(name, (), {}) + sys.modules["httpx"] = stub + sys.path.insert(0, "generated") + import pachca.models, pachca.utils + sys.path.insert(0, "examples") + for path in sorted(pathlib.Path("examples").glob("*.py")): + importlib.import_module(path.stem) + ' + - name: Setup .NET if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.csharp_changed == 'true' uses: actions/setup-dotnet@v4 @@ -124,6 +166,11 @@ jobs: working-directory: sdk/csharp/generated run: dotnet build + - name: Compile C# examples + if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.csharp_changed == 'true' + working-directory: sdk/csharp/examples + run: dotnet build + - name: Setup Swift if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.swift_changed == 'true' uses: swift-actions/setup-swift@v2 @@ -132,6 +179,11 @@ jobs: working-directory: sdk/swift run: swift build + - name: Compile Swift examples + if: github.event_name != 'pull_request' || steps.sdk_changes.outputs.swift_changed == 'true' + working-directory: sdk/swift/examples + run: swift build + - name: Copy Swift Package.swift to root if: github.event_name == 'push' && steps.sdk_check.outputs.should_publish == 'true' run: cp sdk/swift/Package.swift Package.swift diff --git a/.gitignore b/.gitignore index 540cfbd3b..6b8cf54d3 100644 --- a/.gitignore +++ b/.gitignore @@ -76,7 +76,6 @@ bin/ obj/ *.user *.suo -sdk/csharp/examples/Examples.csproj # Рабочие планы/черновики — не в репозитории *_PLAN.md diff --git a/apps/docs/app/.well-known/api-catalog/route.ts b/apps/docs/app/.well-known/api-catalog/route.ts index 376687c81..6e8caaec3 100644 --- a/apps/docs/app/.well-known/api-catalog/route.ts +++ b/apps/docs/app/.well-known/api-catalog/route.ts @@ -38,7 +38,7 @@ export async function GET(): Promise { { href: `${SITE_URL}/openapi.yaml`, type: 'application/yaml', - title: 'Pachca API — OpenAPI 3.1 specification', + title: 'Pachca API — OpenAPI 3.0 specification', }, { href: `${SITE_URL}/pachca.postman_collection.json`, diff --git a/apps/docs/app/robots.txt/route.ts b/apps/docs/app/robots.txt/route.ts index c71314553..d23af912e 100644 --- a/apps/docs/app/robots.txt/route.ts +++ b/apps/docs/app/robots.txt/route.ts @@ -19,7 +19,11 @@ const rules: Rule[] = [ // Allowed: enables Gemini / Google AI grounding & citation of these // docs; does NOT affect Google Search ranking. { userAgent: 'Google-Extended', allow: ['/'] }, - { userAgent: '*', allow: ['/'], disallow: ['/internal/search', '/internal/og'] }, + // `/internal/og` must stay crawlable: it is the og:image / twitter:image for + // every page, and Twitterbot, Slackbot, LinkedInBot and facebookexternalhit + // all honour robots.txt — disallowing it stripped the preview from every + // shared dev.pachca.com link. Only the search endpoint is worth hiding. + { userAgent: '*', allow: ['/'], disallow: ['/internal/search'] }, ]; // Cloudflare Content Signals Policy (2026): a machine-readable statement of diff --git a/apps/docs/app/sitemap.ts b/apps/docs/app/sitemap.ts index 55a7d2dca..1d2d40210 100644 --- a/apps/docs/app/sitemap.ts +++ b/apps/docs/app/sitemap.ts @@ -4,7 +4,7 @@ import { join } from 'node:path'; import { parseOpenAPI } from '@/lib/openapi/parser'; import { generateUrlFromOperation } from '@/lib/openapi/mapper'; import { getOrderedPages } from '@/lib/ordered-pages'; -import { loadUpdates, loadTimeline, groupTimelineByDate } from '@/lib/updates-parser'; +import { loadTimeline, groupTimelineByDate } from '@/lib/updates-parser'; import { groupBySeason } from '@/lib/seasons'; const BASE_URL = 'https://dev.pachca.com'; @@ -56,17 +56,20 @@ export default async function sitemap(): Promise { }); } - // Per-update pages - const updates = loadUpdates(); - for (const update of updates) { + // Per-update pages. Must match generateStaticParams in + // app/updates/[date]/page.tsx, which pre-renders updates ∪ releases — using + // loadUpdates() alone left every release-only date (a dozen of them) out of + // the sitemap even though the page and its .md twin both exist. + const timelineByDate = groupTimelineByDate(loadTimeline()); + for (const group of timelineByDate) { entries.push({ - url: `${BASE_URL}/updates/${update.date}`, - lastModified: new Date(update.date), + url: `${BASE_URL}/updates/${group.date}`, + lastModified: new Date(group.date), }); } // Per-season pages (newest date in the season drives lastModified) - const seasons = groupBySeason(groupTimelineByDate(loadTimeline())); + const seasons = groupBySeason(timelineByDate); for (const sg of seasons) { entries.push({ url: `${BASE_URL}/updates/season/${sg.season.slug}`, diff --git a/apps/docs/components/mdx/cards.tsx b/apps/docs/components/mdx/cards.tsx index 84ba02dd6..ed86d9b9d 100644 --- a/apps/docs/components/mdx/cards.tsx +++ b/apps/docs/components/mdx/cards.tsx @@ -63,6 +63,7 @@ import { Gauge, ListOrdered, Upload, + ExternalLink, type LucideIcon, } from 'lucide-react'; @@ -119,6 +120,7 @@ const iconMap: Record = { Gauge, ListOrdered, Upload, + ExternalLink, }; /** Icon mapping for guide pages by path */ diff --git a/apps/docs/content/guides/buttons.mdx b/apps/docs/content/guides/buttons.mdx index 9814ee581..e528f233d 100644 --- a/apps/docs/content/guides/buttons.mdx +++ b/apps/docs/content/guides/buttons.mdx @@ -84,7 +84,9 @@ Data-кнопка отправляет данные на сервер через ## Ограничения -- Максимальное количество кнопок в строке — 8 -- Максимальное число кнопок у сообщения — 100 +- Максимальное количество строк с кнопками — 32 - Максимальная длина `text` на кнопке — 255 символов - Максимальная длина `data` у кнопки — 255 символов + +Количество кнопок внутри строки API не ограничивает, но в интерфейсе строка не +переносится: больше пяти-шести кнопок в ряд читаются плохо на узких экранах. diff --git a/apps/docs/content/guides/forms/handling.mdx b/apps/docs/content/guides/forms/handling.mdx index 15b4e512b..30b1348f9 100644 --- a/apps/docs/content/guides/forms/handling.mdx +++ b/apps/docs/content/guides/forms/handling.mdx @@ -38,8 +38,8 @@ related: { "type": "view", "event": "submit", - "private_metadata": "{'timeoff_id':4378}", - "callback_id": "timeoff_reguest_form", + "private_metadata": "{\"timeoff_id\":4378}", + "callback_id": "timeoff_request_form", "user_id": 1235523, "data": { "date_start": "2025-07-01", diff --git a/apps/docs/content/guides/incoming-webhooks.mdx b/apps/docs/content/guides/incoming-webhooks.mdx index bb4cdb9fd..4b780a1c7 100644 --- a/apps/docs/content/guides/incoming-webhooks.mdx +++ b/apps/docs/content/guides/incoming-webhooks.mdx @@ -129,7 +129,7 @@ Liquid также поддерживает: используйте API-метод [Новое сообщение](POST /messages). -- **Максимальная длина сообщения** — 40 000 символов. Если результат шаблона превышает этот лимит, сообщение не будет отправлено. +- **Максимальная длина сообщения** — 40 000 байт. Для кириллицы это около 20 000 символов, поскольку каждый символ занимает два байта. Если результат шаблона превышает лимит, сообщение не будет отправлено. - **Пустое сообщение** — если шаблон возвращает пустую строку, сообщение не будет отправлено. - **Ошибка в шаблоне** — если шаблон содержит синтаксическую ошибку, в чат будет отправлено сообщение вида `Ошибка в шаблоне: описание ошибки`. diff --git a/apps/docs/content/guides/n8n/resources.mdx b/apps/docs/content/guides/n8n/resources.mdx index 43974c33b..13bd92d23 100644 --- a/apps/docs/content/guides/n8n/resources.mdx +++ b/apps/docs/content/guides/n8n/resources.mdx @@ -234,7 +234,7 @@ related: |----------|-----| | Create | [Загрузка файла](POST /uploads) | -Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#zagruzka-fajlov). +Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#zagruzka-faylov). --- diff --git a/apps/docs/content/guides/n8n/setup.mdx b/apps/docs/content/guides/n8n/setup.mdx index 218f616d9..ce7a24c5d 100644 --- a/apps/docs/content/guides/n8n/setup.mdx +++ b/apps/docs/content/guides/n8n/setup.mdx @@ -12,7 +12,7 @@ related: витрина · verified витрина · verified - npm · v2.0.6 + npm ## Где запустить n8n diff --git a/apps/docs/content/guides/n8n/testing.mdx b/apps/docs/content/guides/n8n/testing.mdx index 56b884da8..320a78f63 100644 --- a/apps/docs/content/guides/n8n/testing.mdx +++ b/apps/docs/content/guides/n8n/testing.mdx @@ -76,7 +76,7 @@ related: -При ошибке 401 — токен неверный или просрочен. Симптомы и решения — в разделе [401 Unauthorized](/guides/n8n/troubleshooting#nevernyi-token-401-unauthorized). +При ошибке 401 — токен неверный или просрочен. Симптомы и решения — в разделе [401 Unauthorized](/guides/n8n/troubleshooting#nevernyy-token-401-unauthorized). ## Тестирование триггера @@ -133,7 +133,7 @@ related: После этого запустите **Listen for Test Event**, проведите тест, снова активируйте workflow. На время теста продакшен будет выключен — учитывайте это, если на workflow приходит критичный трафик. - Оставьте **Webhook Setup** = **Manual** (значение по умолчанию) — в [ручном режиме](/guides/n8n/trigger#ruchnoi-rezhim) узел не управляет `outgoing_url`, и вы сами решаете, какой URL прописан в настройках бота в Пачке. Можно временно вручную заменить Production URL на Test URL в настройках бота, провести тест, затем вернуть Production URL обратно. + Оставьте **Webhook Setup** = **Manual** (значение по умолчанию) — в [ручном режиме](/guides/n8n/trigger#ruchnoy-rezhim) узел не управляет `outgoing_url`, и вы сами решаете, какой URL прописан в настройках бота в Пачке. Можно временно вручную заменить Production URL на Test URL в настройках бота, провести тест, затем вернуть Production URL обратно. Этот способ даёт максимальный контроль, но требует аккуратности — легко забыть вернуть Production URL. @@ -226,9 +226,9 @@ related: ## Если что-то пошло не так -- **Вебхук не приходит** — проверьте, что бот в чате и workflow активен. Симптомы и решения: [Вебхук не приходит](/guides/n8n/troubleshooting#vebkhuk-ne-prikhodit) +- **Вебхук не приходит** — проверьте, что бот в чате и workflow активен. Симптомы и решения: [Вебхук не приходит](/guides/n8n/troubleshooting#vebhuk-ne-prihodit) - **403 при активации Pachca Trigger** — токену не хватает прав: для токена бота `bot_self:webhook:write`, для персонального `bots:write` плюс доступ редактора к боту. Решение: [403 Forbidden при активации Pachca Trigger](/guides/n8n/troubleshooting#403-forbidden-pri-aktivatsii-pachca-trigger) - **Signature Mismatch** — Signing Secret в Credentials не совпадает с секретом бота. Решение: [Ошибка подписи](/guides/n8n/troubleshooting#oshibka-podpisi-signature-mismatch) -- **401 Unauthorized** — неверный или просроченный токен. Решение: [401 Unauthorized](/guides/n8n/troubleshooting#nevernyi-token-401-unauthorized) +- **401 Unauthorized** — неверный или просроченный токен. Решение: [401 Unauthorized](/guides/n8n/troubleshooting#nevernyy-token-401-unauthorized) Полный список типовых ошибок — в разделе [Устранение ошибок](/guides/n8n/troubleshooting). diff --git a/apps/docs/content/guides/n8n/trigger.mdx b/apps/docs/content/guides/n8n/trigger.mdx index d48939f18..bdf0ca260 100644 --- a/apps/docs/content/guides/n8n/trigger.mdx +++ b/apps/docs/content/guides/n8n/trigger.mdx @@ -102,7 +102,7 @@ Pachca Trigger поддерживает два режима настройки: - Откройте настройки вашего бота в Пачке, перейдите на вкладку **Исходящий Webhook** и вставьте скопированный Production URL в поле **Webhook URL**. Подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroiki). + Откройте настройки вашего бота в Пачке, перейдите на вкладку **Исходящий Webhook** и вставьте скопированный Production URL в поле **Webhook URL**. Подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroyki). Нажмите **Activate** в n8n. С этого момента бот отправляет события в ваш workflow. @@ -184,7 +184,7 @@ Pachca Trigger поддерживает два режима настройки: ### Проверка подписи -Для защиты от поддельных запросов добавьте **Signing Secret** бота в [Credentials](/guides/n8n/setup#sozdanie-credentials). Trigger автоматически проверяет HMAC-SHA256 подпись каждого входящего запроса через заголовок `pachca-signature` и отклоняет невалидные. +Для защиты от поддельных запросов добавьте **Signing Secret** бота в [Credentials](/guides/n8n/setup#nastroyka-credentials). Trigger автоматически проверяет HMAC-SHA256 подпись каждого входящего запроса через заголовок `pachca-signature` и отклоняет невалидные. Подробнее о механизме подписи — в разделе [Безопасность и обработчик](/guides/webhook/handler#bezopasnost). @@ -192,7 +192,7 @@ Pachca Trigger поддерживает два режима настройки: ### Ограничение по IP -Укажите **Webhook Allowed IPs** в [Credentials](/guides/n8n/setup#sozdanie-credentials) — через запятую список IP-адресов, с которых принимаются вебхуки. Пачка отправляет вебхуки с IP `37.200.70.177`. +Укажите **Webhook Allowed IPs** в [Credentials](/guides/n8n/setup#nastroyka-credentials) — через запятую список IP-адресов, с которых принимаются вебхуки. Пачка отправляет вебхуки с IP `37.200.70.177`. Если поле пустое — проверка IP отключена и запросы принимаются с любого адреса. diff --git a/apps/docs/content/guides/n8n/troubleshooting.mdx b/apps/docs/content/guides/n8n/troubleshooting.mdx index 01dd82f41..55d0b06d7 100644 --- a/apps/docs/content/guides/n8n/troubleshooting.mdx +++ b/apps/docs/content/guides/n8n/troubleshooting.mdx @@ -79,7 +79,7 @@ related: 1. **Токен бота:** включите для бота скоуп `bot_self:webhook:write` — настройки бота → вкладка **API** 2. **Персональный токен:** убедитесь, что у пользователя токена стоит роль **Редактор** в списке доступов бота, и что у токена есть скоуп `bots:write` (в настройках токена в **Автоматизации** → **Интеграции** → **API**) -3. Либо переключите **Webhook Setup** = **Manual** и пропишите Production URL в настройках бота самостоятельно — см. [Ручной режим](/guides/n8n/trigger#ruchnoi-rezhim) +3. Либо переключите **Webhook Setup** = **Manual** и пропишите Production URL в настройках бота самостоятельно — см. [Ручной режим](/guides/n8n/trigger#ruchnoy-rezhim) --- diff --git a/apps/docs/content/guides/n8n/workflows.mdx b/apps/docs/content/guides/n8n/workflows.mdx index 0a5b47c35..41d0b1cc2 100644 --- a/apps/docs/content/guides/n8n/workflows.mdx +++ b/apps/docs/content/guides/n8n/workflows.mdx @@ -103,7 +103,7 @@ related: ] ``` -Подробнее о кнопках — в разделе [Продвинутые функции](/guides/n8n/advanced#knopki-v-soobshheniyax). +Подробнее о кнопках — в разделе [Продвинутые функции](/guides/n8n/advanced#knopki-v-soobscheniyah). @@ -166,7 +166,7 @@ related: **Что задействовано:** триггер, кнопки, формы, треды, условная логика. -Подробнее о кнопках — в разделе [Кнопки в сообщениях](/guides/n8n/advanced#knopki-v-soobshheniyax), о формах — в разделе [Формы](/guides/n8n/advanced#formy). +Подробнее о кнопках — в разделе [Кнопки в сообщениях](/guides/n8n/advanced#knopki-v-soobscheniyah), о формах — в разделе [Формы](/guides/n8n/advanced#formy). diff --git a/apps/docs/content/guides/webhook/events.mdx b/apps/docs/content/guides/webhook/events.mdx index 67e1aa919..e80131721 100644 --- a/apps/docs/content/guides/webhook/events.mdx +++ b/apps/docs/content/guides/webhook/events.mdx @@ -43,7 +43,7 @@ related: -Payload содержит только основные поля сообщения: текст, автора, чат, ответ и тред. По payload нельзя определить, есть ли у сообщения вложение: у сообщения без текста (например, только с файлом) поле `content` придёт пустой строкой. Вложения, реакции, кнопки, информацию о пересланном сообщении и другие поля получите методом [Информация о сообщении](GET /messages/{id}) по полю `id`. Для события `delete` сообщение уже удалено, поэтому добрать его по `id` не получится. +Payload содержит только основные поля сообщения: текст, автора, чат, ответ и тред. По payload нельзя определить, есть ли у сообщения вложение: у сообщения без текста (например, только с файлом) поле `content` придёт пустой строкой. Вложения, реакции, кнопки, информацию о пересланном сообщении и другие поля получите методом [Информация о сообщении](GET /messages/{id}) по полю `id`. Для события `delete` метод по-прежнему отвечает `200`, но возвращает уже очищенную запись: `content` пустой, вложения и реакции удалены, заполнено поле `deleted_at`. В списке сообщений такая запись не возвращается. ## Реакции diff --git a/apps/docs/content/guides/webhook/polling.mdx b/apps/docs/content/guides/webhook/polling.mdx index d07e51a92..04c6d46b5 100644 --- a/apps/docs/content/guides/webhook/polling.mdx +++ b/apps/docs/content/guides/webhook/polling.mdx @@ -11,7 +11,7 @@ related: Если у вас нет возможности принимать входящие HTTP-запросы (локальная разработка, жёсткие firewall-правила), используйте **поллинг** — получение событий через API или готовые helpers в SDK. -Включите настройку **Сохранять историю событий** на вкладке **Исходящий Webhook** в настройках бота (подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroiki)), чтобы получать события через метод [История событий](GET /webhooks/events). +Включите настройку **Сохранять историю событий** на вкладке **Исходящий Webhook** в настройках бота (подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroyki)), чтобы получать события через метод [История событий](GET /webhooks/events). SDK helpers по умолчанию начинают читать только события, созданные после запуска воркера, и дедуплицируют уже обработанные delivery ID в памяти. diff --git a/apps/docs/content/updates/2025-04-07.md b/apps/docs/content/updates/2025-04-07.md index 188722980..4aa613c29 100644 --- a/apps/docs/content/updates/2025-04-07.md +++ b/apps/docs/content/updates/2025-04-07.md @@ -11,4 +11,4 @@ title: "Сортировка сообщений" Был обновлен следующий метод: -- [Список сообщений чата](GET /chats/{id}/messages) +- [Список сообщений чата](GET /messages) diff --git a/apps/docs/content/updates/2026-03-19.md b/apps/docs/content/updates/2026-03-19.md index 8c0d422b5..809732ab1 100644 --- a/apps/docs/content/updates/2026-03-19.md +++ b/apps/docs/content/updates/2026-03-19.md @@ -7,7 +7,7 @@ title: "Редактирование скоупов, исправления в Метод [Закрепление сообщения](POST /messages/{id}/pin) теперь возвращает `204 No Content` вместо `201 Created`. -Поле `thread` в модели [сообщения](/api/models#message) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](POST /messages/{id}/thread) и [Информация о треде](GET /threads/{id}). +Поле `thread` в модели [сообщения](/api/models#soobschenie) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](POST /messages/{id}/thread) и [Информация о треде](GET /threads/{id}). Поле `payload` в модели ошибки валидации теперь имеет тип `object | null` вместо `string | null` и содержит структурированные данные — идентификатор кастомного свойства при ошибке поля или параметры авторизации. diff --git a/apps/docs/content/updates/2026-07-28.md b/apps/docs/content/updates/2026-07-28.md new file mode 100644 index 000000000..be30ecc1c --- /dev/null +++ b/apps/docs/content/updates/2026-07-28.md @@ -0,0 +1,26 @@ +--- +date: '2026-07-28' +title: 'Уточнения в описании API' +--- + +Подробнее описали поведение нескольких методов и полей. Работа API не менялась. + +Были уточнены следующие методы: + +- [Журнал аудита](GET /audit_events) — параметр `end_time` включает верхнюю + границу: выборка за период захватывает событие, попавшее ровно на неё. +- [Мой статус](GET /profile/status) и [Статус сотрудника](GET /users/{user_id}/status) + — если статус не установлен, метод отвечает `200` и телом `null`. + +Уточнены описания полей моделей: + +- У 32 полей описано, в каком случае приходит `null`. Например, + `last_activity_at` пуст, пока сотрудник ни разу не заходил в Пачку. +- `display_avatar_url` и `display_name` приходят только у сообщений от ботов. +- `name` у реакции заполнено всегда. +- `last_name`, `department` и `title` у незаполненного значения приходят как + `null` либо как пустая строка. +- `first_name` приходит как `null`, пока приглашённый сотрудник не завершил + регистрацию, то есть пока `invite_status` равен `sent`. +- `value` у дополнительного поля приходит как `null`, если поле не заполнено. + Число передаётся строкой, дата — в формате ISO 8601. diff --git a/apps/docs/data/releases.json b/apps/docs/data/releases.json index 9e61eb873..3db996568 100644 --- a/apps/docs/data/releases.json +++ b/apps/docs/data/releases.json @@ -1,4 +1,62 @@ [ + { + "product": "sdk", + "version": "1.0.28", + "date": "2026-07-28", + "changes": [ + { + "type": "-", + "description": "Поле `details` в журнале аудита (`GET /audit_events`) читается во всех языках" + }, + { + "type": "-", + "description": "Ошибки API разбираются в типизированный `ApiError`: поле `payload` принимает вложенный объект" + }, + { + "type": "-", + "description": "Python: блоки представлений (`ViewBlockUnion`) не теряют данные" + }, + { + "type": "-", + "description": "Примеры из README компилируются" + }, + { + "type": "~", + "description": "Union без общего поля-дискриминатора разбирается по составу полей. В Go у такого union появилось поле `Raw` с исходным JSON" + }, + { + "type": "~", + "description": "`first_name` у сотрудника, `value` у дополнительного поля, `display_avatar_url` и `display_name` у сообщения стали опциональными" + }, + { + "type": "~", + "description": "`Reaction.name` больше не nullable" + }, + { + "type": "~", + "description": "У 32 полей описано, когда API возвращает `null`; исправлены примеры `callback_id` и `private_metadata` для форм" + } + ] + }, + { + "product": "generator", + "version": "1.1.10", + "date": "2026-07-28", + "changes": [ + { + "type": "+", + "description": "Эмиттеры Go, C#, Swift, Kotlin и Python умеют union без дискриминатора — вариант выбирается по составу полей" + }, + { + "type": "-", + "description": "Дискриминатор union определяется по всем членам сразу: поле принимается, только если литерал есть у каждого" + }, + { + "type": "-", + "description": "Открытый `additionalProperties` даёт значение произвольного типа, а не строку. В Kotlin для него используется `JsonElement`" + } + ] + }, { "product": "sdk", "version": "1.0.27", @@ -18,6 +76,72 @@ } ] }, + { + "product": "cli", + "version": "2026.7.2", + "date": "2026-07-28", + "changes": [ + { + "type": "-", + "description": "`files direct-url`: файл добавляется в форму последним" + }, + { + "type": "-", + "description": "`files direct-url` не падает при успешной загрузке" + }, + { + "type": "-", + "description": "Явный `--profile` не перебивается переменной `PACHCA_TOKEN`" + }, + { + "type": "-", + "description": "Запись больше не повторяется автоматически при 503" + }, + { + "type": "-", + "description": "`chats download-export`: имя файла из `Content-Disposition` не уводит запись за пределы указанной папки" + }, + { + "type": "-", + "description": "`-o csv`: ячейки с `=`, `+`, `-`, `@` экранируются, объекты и массивы выводятся как JSON" + } + ] + }, + { + "product": "n8n", + "version": "2.0.16", + "date": "2026-07-28", + "changes": [ + { + "type": "-", + "description": "Запись (`POST`/`PATCH`) больше не повторяется автоматически при 5xx" + }, + { + "type": "-", + "description": "`Bot`: ресурс открывается на `Get Many` вместо `Recreate own bot token`" + }, + { + "type": "-", + "description": "`User`: у операций со статусом и аватаркой вернулся выбор сотрудника вместо числового поля" + }, + { + "type": "-", + "description": "`User` → `Update Avatar` и `Chat` → `Download Export` работают при выборе сущности из списка или по ссылке" + }, + { + "type": "-", + "description": "Выбор сотрудника: список открывается сразу, без ввода текста" + }, + { + "type": "-", + "description": "Пагинация и поиск чатов: курсор кодируется, доступны результаты со второй страницы и далее" + }, + { + "type": "-", + "description": "Триггер: вебхук без `webhook_timestamp` отклоняется, если задан секрет подписи" + } + ] + }, { "product": "cli", "version": "2026.7.1", @@ -706,8 +830,14 @@ "version": "1.0.13", "date": "2026-04-10", "changes": [ - { "type": "~", "description": "Сервисы как интерфейсы для dependency injection" }, - { "type": "~", "description": "HTTP-клиент с конструкторами для кастомной конфигурации" } + { + "type": "~", + "description": "Сервисы как интерфейсы для dependency injection" + }, + { + "type": "~", + "description": "HTTP-клиент с конструкторами для кастомной конфигурации" + } ] }, { @@ -737,10 +867,22 @@ "version": "2.0.1–2.0.4", "date": "2026-04-08", "changes": [ - { "type": "-", "description": "Исправлена ошибка 403 при загрузке файлов" }, - { "type": "-", "description": "Исправлен краш в JSON-режиме форм" }, - { "type": "-", "description": "Исправлена ошибка визуального редактора форм" }, - { "type": "~", "description": "Миграция v1→v2: авто-заполнение параметра type для форм" } + { + "type": "-", + "description": "Исправлена ошибка 403 при загрузке файлов" + }, + { + "type": "-", + "description": "Исправлен краш в JSON-режиме форм" + }, + { + "type": "-", + "description": "Исправлена ошибка визуального редактора форм" + }, + { + "type": "~", + "description": "Миграция v1→v2: авто-заполнение параметра type для форм" + } ] }, { @@ -748,7 +890,10 @@ "version": "2026.4.0", "date": "2026-04-07", "changes": [ - { "type": "+", "description": "Загрузка и удаление аватара профиля и сотрудника" }, + { + "type": "+", + "description": "Загрузка и удаление аватара профиля и сотрудника" + }, { "type": "-", "description": "Исправлена сортировка: `--order` без `--sort` теперь корректно работает" @@ -764,8 +909,14 @@ "version": "1.0.12", "date": "2026-04-07", "changes": [ - { "type": "+", "description": "Автоповтор при 5xx с exponential backoff" }, - { "type": "~", "description": "Обновление API: аватары, сортировка, упоминания" } + { + "type": "+", + "description": "Автоповтор при 5xx с exponential backoff" + }, + { + "type": "~", + "description": "Обновление API: аватары, сортировка, упоминания" + } ] }, { @@ -773,8 +924,14 @@ "version": "1.1.1", "date": "2026-04-07", "changes": [ - { "type": "+", "description": "Генерация C# SDK для .NET 8+" }, - { "type": "+", "description": "Автоповтор при 5xx с exponential backoff и jitter" } + { + "type": "+", + "description": "Генерация C# SDK для .NET 8+" + }, + { + "type": "+", + "description": "Автоповтор при 5xx с exponential backoff и jitter" + } ] }, { @@ -786,13 +943,22 @@ "type": "+", "description": "Полная версия 2.0: автогенерация из OpenAPI с обратной совместимостью v1" }, - { "type": "+", "description": "18 ресурсов и 60+ операций — полное покрытие API" }, + { + "type": "+", + "description": "18 ресурсов и 60+ операций — полное покрытие API" + }, { "type": "+", "description": "Pachca Trigger с авторегистрацией вебхука и 16 типами событий" }, - { "type": "+", "description": "Курсорная автопагинация: Return All / Limit" }, - { "type": "+", "description": "AI Tool Use — использование узлов как инструментов AI Agent" }, + { + "type": "+", + "description": "Курсорная автопагинация: Return All / Limit" + }, + { + "type": "+", + "description": "AI Tool Use — использование узлов как инструментов AI Agent" + }, { "type": "+", "description": "Верификация подписи вебхука HMAC-SHA256, IP-фильтр, защита от повторов" @@ -804,8 +970,14 @@ "version": "1.0.9", "date": "2026-03-27", "changes": [ - { "type": "+", "description": "Добавлен C# SDK для .NET 8+" }, - { "type": "~", "description": "Регенерация SDK, улучшения примеров C#" } + { + "type": "+", + "description": "Добавлен C# SDK для .NET 8+" + }, + { + "type": "~", + "description": "Регенерация SDK, улучшения примеров C#" + } ] }, { @@ -813,12 +985,18 @@ "version": "2026.3.10", "date": "2026-03-21", "changes": [ - { "type": "~", "description": "`link_preview` перемещено на верхний уровень тела запроса" }, + { + "type": "~", + "description": "`link_preview` перемещено на верхний уровень тела запроса" + }, { "type": "~", "description": "Параметры `start-time` и `end-time` в security стали необязательными" }, - { "type": "~", "description": "Сортировка через `--sort` и `--order` вместо `--sort-id`" } + { + "type": "~", + "description": "Сортировка через `--sort` и `--order` вместо `--sort-id`" + } ] }, { @@ -826,7 +1004,10 @@ "version": "1.0.3", "date": "2026-03-21", "changes": [ - { "type": "-", "description": "Исправления по аудиту API: модели, параметры, примеры" } + { + "type": "-", + "description": "Исправления по аудиту API: модели, параметры, примеры" + } ] }, { @@ -834,7 +1015,10 @@ "version": "1.0.2", "date": "2026-03-20", "changes": [ - { "type": "-", "description": "Исправлена модель тредов, имя пакета Python, импорты Kotlin" } + { + "type": "-", + "description": "Исправлена модель тредов, имя пакета Python, импорты Kotlin" + } ] }, { @@ -861,7 +1045,10 @@ "type": "+", "description": "Первый релиз: генерация SDK из OpenAPI для TypeScript, Python, Go, Kotlin, Swift" }, - { "type": "+", "description": "Загрузка спецификации по URL с дефолтным адресом Пачки" } + { + "type": "+", + "description": "Загрузка спецификации по URL с дефолтным адресом Пачки" + } ] }, { @@ -898,14 +1085,22 @@ "product": "cli", "version": "2026.3.6", "date": "2026-03-15", - "changes": [{ "type": "~", "description": "Топик `thread` переименован в `threads`" }] + "changes": [ + { + "type": "~", + "description": "Топик `thread` переименован в `threads`" + } + ] }, { "product": "sdk", "version": "1.0.1", "date": "2026-03-14", "changes": [ - { "type": "~", "description": "Регенерация SDK после реструктуризации документации" } + { + "type": "~", + "description": "Регенерация SDK после реструктуризации документации" + } ] }, { @@ -913,8 +1108,14 @@ "version": "2026.3.5", "date": "2026-03-07", "changes": [ - { "type": "~", "description": "Сценарии переписаны на CLI-примеры с подсказками" }, - { "type": "+", "description": "Пример «Форма заявки/запроса»" } + { + "type": "~", + "description": "Сценарии переписаны на CLI-примеры с подсказками" + }, + { + "type": "+", + "description": "Пример «Форма заявки/запроса»" + } ] }, { @@ -922,8 +1123,14 @@ "version": "2026.3.4", "date": "2026-03-05", "changes": [ - { "type": "+", "description": "Переменная `PACHCA_API_URL` для кастомного base URL" }, - { "type": "-", "description": "Исправлено выравнивание в уведомлении о доступном обновлении" } + { + "type": "+", + "description": "Переменная `PACHCA_API_URL` для кастомного base URL" + }, + { + "type": "-", + "description": "Исправлено выравнивание в уведомлении о доступном обновлении" + } ] }, { @@ -931,9 +1138,18 @@ "version": "2026.3.1–2026.3.3", "date": "2026-03-04", "changes": [ - { "type": "+", "description": "Все флаги в kebab-case, boolean-флаги с `--no-` префиксом" }, - { "type": "+", "description": "Структурированные ошибки валидации с hint-подсказками" }, - { "type": "+", "description": "Команда `doctor` — диагностика окружения" }, + { + "type": "+", + "description": "Все флаги в kebab-case, boolean-флаги с `--no-` префиксом" + }, + { + "type": "+", + "description": "Структурированные ошибки валидации с hint-подсказками" + }, + { + "type": "+", + "description": "Команда `doctor` — диагностика окружения" + }, { "type": "+", "description": "Команда `introspect` — метаинформация о командах для агентов" @@ -942,8 +1158,14 @@ "type": "+", "description": "Команда `api` — прямые HTTP-запросы с `-f/-F`, `--input`, `--query`" }, - { "type": "+", "description": "Команда `guide` — поиск по сценариям использования API" }, - { "type": "~", "description": "Описания команд и топиков переведены на русский язык" } + { + "type": "+", + "description": "Команда `guide` — поиск по сценариям использования API" + }, + { + "type": "~", + "description": "Описания команд и топиков переведены на русский язык" + } ] }, { @@ -951,8 +1173,14 @@ "version": "1.0.0", "date": "2026-03-04", "changes": [ - { "type": "+", "description": "Первый релиз SDK: TypeScript, Python, Go, Kotlin, Swift" }, - { "type": "+", "description": "Типизированные клиенты с автопагинацией для каждого языка" } + { + "type": "+", + "description": "Первый релиз SDK: TypeScript, Python, Go, Kotlin, Swift" + }, + { + "type": "+", + "description": "Типизированные клиенты с автопагинацией для каждого языка" + } ] } ] diff --git a/apps/docs/lib/code-generators/cli.ts b/apps/docs/lib/code-generators/cli.ts index c8b18f08a..c48fbaadc 100644 --- a/apps/docs/lib/code-generators/cli.ts +++ b/apps/docs/lib/code-generators/cli.ts @@ -5,7 +5,7 @@ import { generateExample, type ExampleOptions, } from '../openapi/example-generator'; -import { requiresAuth, getQueryParams, resolveParamName } from './utils'; +import { requiresAuth, getQueryParams, resolveParamName, shellQuote } from './utils'; export function generateCLI(endpoint: Endpoint, options?: ExampleOptions): string { const url = generateUrlFromOperation(endpoint); @@ -31,7 +31,7 @@ export function generateCLI(endpoint: Endpoint, options?: ExampleOptions): strin parts.push(`--file=./${name}.jpg`); continue; } - valueToFlag(name, example, schemaType, parts); + valueToFlag(name, example, schemaType, parts, true); } } @@ -98,12 +98,20 @@ function toKebabCase(s: string): string { .toLowerCase(); } -/** Convert a value to CLI flag(s) and push to parts */ +/** + * Convert a value to CLI flag(s) and push to parts. + * + * `jsonArrays` distinguishes the two array conventions the real CLI uses: + * body arrays go through `JSON.parse` (28 call sites), query arrays through + * `.split(',')`. Emitting a comma-joined list for a body flag produced an + * example that dies with «Invalid JSON in --member-ids» when pasted. + */ function valueToFlag( name: string, value: unknown, schemaType: string | string[] | undefined, - parts: string[] + parts: string[], + jsonArrays = false ): void { const flag = toKebabCase(name); if (value === undefined || value === null) return; @@ -116,23 +124,22 @@ function valueToFlag( if (Array.isArray(value)) { if (value.length === 0) return; - if (typeof value[0] !== 'object') { + if (typeof value[0] !== 'object' && !jsonArrays) { parts.push(`--${flag}=${value.join(',')}`); } else { - parts.push(`--${flag}='${JSON.stringify(value)}'`); + parts.push(`--${flag}=${shellQuote(JSON.stringify(value))}`); } } else if (typeof value === 'object') { - parts.push(`--${flag}='${JSON.stringify(value)}'`); + parts.push(`--${flag}=${shellQuote(JSON.stringify(value))}`); } else if (typeof value === 'number' || typeof value === 'bigint') { parts.push(`--${flag}=${value}`); } else { const strValue = String(value); // Квотируем только если в значении есть пробел или shell-метасимвол. // Простые URL, идентификаторы, enum-значения и slug-и остаются без кавычек - // (по соглашению gh / Vercel / Heroku / AWS). Реальные URL с `?...&...` - // пользователь сам должен взять в кавычки при копировании. + // (по соглашению gh / Vercel / Heroku / AWS). if (/[\s&|;()<>*?$`\\'"#]/.test(strValue)) { - parts.push(`--${flag}="${strValue}"`); + parts.push(`--${flag}=${shellQuote(strValue)}`); } else { parts.push(`--${flag}=${strValue}`); } @@ -151,6 +158,28 @@ interface BodyField { format?: string; } +/** + * Flatten one level of `allOf` into the schema's own properties. The docs + * parser keeps `allOf` unmerged, so a composed schema has no `properties` of + * its own until this runs. + */ +function mergeAllOf(schema: Schema): Schema { + if (!schema?.allOf || schema.allOf.length === 0) return schema ?? {}; + const merged: Schema = { ...schema }; + const properties: Record = { ...(schema.properties ?? {}) }; + const required: string[] = [...(schema.required ?? [])]; + for (const sub of schema.allOf) { + const inner = mergeAllOf(sub as Schema); + Object.assign(properties, inner.properties ?? {}); + required.push(...(inner.required ?? [])); + if (!merged.type && inner.type) merged.type = inner.type; + } + merged.properties = properties; + merged.required = required; + delete merged.allOf; + return merged; +} + function extractUnwrappedBodyFields( requestBody: Endpoint['requestBody'], options?: ExampleOptions @@ -161,7 +190,7 @@ function extractUnwrappedBodyFields( requestBody.content['application/json'] || requestBody.content['multipart/form-data']; if (!content?.schema) return []; - const schema = content.schema; + const schema = mergeAllOf(content.schema); const properties = schema.properties; if (!properties || schema.type !== 'object') { // Not an object schema — generate example as-is @@ -177,10 +206,13 @@ function extractUnwrappedBodyFields( const topKeys = Object.keys(properties); - // Detect wrapper: exactly one top-level property that is an object with its own properties + // Detect wrapper: exactly one top-level property that is an object with its + // own properties. Resolve allOf and don't require a literal `type: 'object'` + // — an allOf-composed wrapper usually declares neither, and the real CLI + // generator resolves before asking, so the two would disagree. const objectKeys = topKeys.filter((k) => { - const propSchema = properties[k] as Schema; - return propSchema.type === 'object' && propSchema.properties; + const inner = mergeAllOf(properties[k] as Schema); + return !!inner.properties && Object.keys(inner.properties).length > 0; }); if (objectKeys.length === 1) { diff --git a/apps/docs/lib/code-generators/curl.ts b/apps/docs/lib/code-generators/curl.ts index f1cde3516..9b40cf7e5 100644 --- a/apps/docs/lib/code-generators/curl.ts +++ b/apps/docs/lib/code-generators/curl.ts @@ -10,6 +10,7 @@ import { hasMultipartContent, resolveUrl, buildQueryString, + shellQuote, } from './utils'; export function generateCurl( @@ -51,11 +52,11 @@ export function generateCurl( const fields = generateMultipartExample(endpoint.requestBody); if (fields) { for (const field of fields) { - if (field.isFile) { - curl += ` \\\n -F "${field.name}=@${field.value}"`; - } else { - curl += ` \\\n -F "${field.name}=${field.value}"`; - } + // Single quotes, not double: an S3 `key` legitimately contains the + // literal `${filename}` placeholder, which bash would expand to nothing + // inside double quotes — silently truncating the upload path. + const prefix = field.isFile ? '@' : ''; + curl += ` \\\n -F ${shellQuote(`${field.name}=${prefix}${field.value}`)}`; } } } else { @@ -69,7 +70,7 @@ export function generateCurl( const requestExample = generateRequestExample(endpoint.requestBody, options); if (requestExample) { - curl += ` \\\n -d '${JSON.stringify(requestExample, null, 2)}'`; + curl += ` \\\n -d ${shellQuote(JSON.stringify(requestExample, null, 2))}`; } } } diff --git a/apps/docs/lib/code-generators/utils.ts b/apps/docs/lib/code-generators/utils.ts index c90d7df97..90954c3ca 100644 --- a/apps/docs/lib/code-generators/utils.ts +++ b/apps/docs/lib/code-generators/utils.ts @@ -4,6 +4,18 @@ export { isRecord } from '../utils/type-guards'; import type { Endpoint, Parameter } from '../openapi/types'; import { generateParameterExample } from '../openapi/example-generator'; +/** + * POSIX single-quoting for a shell argument. + * + * Single quotes are the only quoting that leaves `$`, backtick and `\` inert — + * double quotes still expand them, so a value like `.../${filename}` (a real S3 + * key template) or `{"a":1}` got mangled on paste. An embedded `'` is closed, + * escaped and reopened. + */ +export function shellQuote(value: string): string { + return `'${value.replace(/'/g, `'\\''`)}'`; +} + export function resolveUrl(endpoint: Endpoint, baseUrl: string): string { let resolvedPath = endpoint.path; const pathParams = endpoint.parameters.filter((p) => p.in === 'path'); diff --git a/apps/docs/lib/markdown-generator.ts b/apps/docs/lib/markdown-generator.ts index cb6751a9d..4f1c6ec09 100644 --- a/apps/docs/lib/markdown-generator.ts +++ b/apps/docs/lib/markdown-generator.ts @@ -130,6 +130,10 @@ export function schemaToMarkdown( const description = prop.description || rawProp.description || ''; const meta: string[] = []; if (isRequired) meta.push('required'); + // `nullable` was never surfaced, so a field that the API returns as null + // read as a plain non-null type. Only descriptions that happened to + // mention it told the reader — 38 of the 53 nullable fields did not. + if (prop.nullable) meta.push('nullable'); if (prop.default !== undefined) { const defaultStr = typeof prop.default === 'string' ? prop.default : JSON.stringify(prop.default); @@ -148,9 +152,12 @@ export function schemaToMarkdown( content += ` — ${description}`; } if (includeExamples && prop.example !== undefined) { - const ex = - typeof prop.example === 'string' ? `"${prop.example}"` : JSON.stringify(prop.example); - content += `. Пример: \`${ex}\``; + // JSON.stringify for strings too — the raw `"${...}"` branch produced + // unescaped nested quotes for values that are themselves JSON. + const ex = JSON.stringify(prop.example); + // Don't add a period when the description already ends a sentence. + const sep = /[.!?…]$/.test(description) ? '' : '.'; + content += `${sep} Пример: \`${ex}\``; } content += '\n'; diff --git a/apps/docs/lib/mdx-expander.ts b/apps/docs/lib/mdx-expander.ts index 4fa8e927f..f46ce1509 100644 --- a/apps/docs/lib/mdx-expander.ts +++ b/apps/docs/lib/mdx-expander.ts @@ -30,6 +30,22 @@ import { SKILL_TAG_MAP } from '../scripts/skills/config'; * Format a schema to markdown with title * Uses schemaToMarkdown from markdown-generator for consistency */ +/** + * Markdown equivalents for components handed to a prop as JSX, e.g. + * `lead={}`. Such a component is not a tag in the document, so + * no tag-based handler ever sees it. + * + * The prose is duplicated from the component on purpose: the React version + * renders , this one needs markdown links. Keep both in step — + * components/mdx/api-intro-notes.tsx. + */ +const JSX_PROP_MARKDOWN: Record = { + ApiIntroNotes: + 'Если только начинаете, загляните в [руководства](/) с пошаговыми примерами. ' + + 'Можно обойтись и без написания кода: соберите интеграции из визуальных блоков ' + + 'в no-code инструменте [n8n](/guides/n8n/overview).', +}; + function formatSchemaWithTitle(schema: Schema, title?: string): string { let md = ''; @@ -307,6 +323,14 @@ export async function expandMdxComponents(content: string): Promise { if (title) md += `# ${title}\n\n`; if (description) md += `${description}\n\n`; + // `lead={}` renders extra prose in the left column. Only + // title/description were read here, so that prose was silently dropped + // from every generated artifact — no raw tag leaked, it just vanished. + // Matched against `inner`, not `attrs`: the `>` inside `/>` terminates + // the attribute capture early, so the prop never appears in `attrs`. + const lead = inner.match(/lead=\{<(\w+)\s*\/>\}/)?.[1]; + if (lead && JSX_PROP_MARKDOWN[lead]) md += `${JSX_PROP_MARKDOWN[lead]}\n\n`; + // Extract compact Card links const compactCards: string[] = []; const compactCardRegex = //g; @@ -365,7 +389,17 @@ export async function expandMdxComponents(content: string): Promise { const titlePart = href ? `[${title}](${href})` : `**${title}**`; items.push(`- ${titlePart} — ${content}`); } - return items.length > 0 ? items.join('\n') + '\n' : ''; + // `` inside a group was already turned into a markdown list + // item by the handler above, so by now `inner` may hold no tags at + // all. Returning '' in that case silently deleted the whole group — six SDK + // links and the n8n install links vanished from every generated artifact. + // Keep the pre-expanded text and append anything still tag-shaped. + const preExpanded = inner + .replace(/([\s\S]*?)<\/Card>|\/>)/g, '') + .replace(/\n{2,}(?=- )/g, '\n') // keep the list tight + .trim(); + const parts = [preExpanded, items.join('\n')].filter(Boolean); + return parts.length > 0 ? parts.join('\n') + '\n' : ''; }); // Standalone non-compact children or left diff --git a/apps/docs/lib/openapi/example-generator.ts b/apps/docs/lib/openapi/example-generator.ts index 35e6c5d0c..fd19a8c60 100644 --- a/apps/docs/lib/openapi/example-generator.ts +++ b/apps/docs/lib/openapi/example-generator.ts @@ -1,4 +1,4 @@ -import type { Schema, RequestBody, Response, Parameter } from './types'; +import type { Schema, RequestBody, Response, Parameter, MediaType } from './types'; /** * Options for controlling example generation. @@ -261,6 +261,30 @@ export function generateExample( } } +/** + * Generate request body example from schema + */ +/** + * A media type's hand-authored example, if the spec carries one. + * + * An operation-level `example` is the response/request the API actually + * produces for THAT operation, which a schema-derived example cannot know: + * `POST /threads` returns `message_id: null` (a standalone thread has no + * message), while the `Thread` schema's own property example is a real id. + * Both generators used to jump straight to the schema, so all nine authored + * examples in the spec were silently discarded and the docs showed values the + * API never returns. + */ +function authoredExample(content: MediaType | undefined): unknown { + if (!content) return undefined; + if (content.example !== undefined) return content.example; + // `examples` (the plural map) — take the first entry's value. + const first = content.examples && Object.values(content.examples)[0]; + return first && typeof first === 'object' && 'value' in first + ? (first as { value: unknown }).value + : undefined; +} + /** * Generate request body example from schema */ @@ -278,6 +302,9 @@ export function generateRequestExample( return undefined; } + const authored = authoredExample(content); + if (authored !== undefined) return authored; + return generateExample(content.schema, 0, options); } @@ -297,6 +324,11 @@ export function generateResponseExample( return undefined; } + // The authored example wins over the `minimal` toggle: it is the real + // response, not a rendering preference. + const authored = authoredExample(jsonContent); + if (authored !== undefined) return authored; + return generateExample(jsonContent.schema, 0, options); } @@ -355,7 +387,9 @@ const UPLOAD_FIELD_EXAMPLES: Record = { 'x-amz-algorithm': 'AWS4-HMAC-SHA256', 'x-amz-date': '20211122T065734Z', 'x-amz-signature': '87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475', - key: 'attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/$filename', + // `${filename}` — the literal placeholder POST /uploads returns, matching + // the spec example and the surrounding prose. `$filename` was neither. + key: 'attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}', }; /** diff --git a/apps/docs/lib/openapi/parser.ts b/apps/docs/lib/openapi/parser.ts index 96a85f9fa..a600567e8 100644 --- a/apps/docs/lib/openapi/parser.ts +++ b/apps/docs/lib/openapi/parser.ts @@ -274,7 +274,15 @@ function parseResponse(response: Record, openapi: OpenAPIData): /** Normalize x-enum-descriptions keys to match actual enum values. * TypeSpec generates member-name keys (e.g. `chats_read`) but enum values - * may use colons (e.g. `chats:read`). Re-key descriptions to match values. */ + * may use colons (e.g. `chats:read`). Re-key descriptions to match values. + * + * This is NOT removable dead code, and the mismatch is not fixable upstream: + * TypeSpec rejects quoted keys in object literals — `#{ "chats:read": ... }` + * fails with `Property expected`, and so does `#{ "simple": ... }`, so it is + * the quoting itself, not the colon. An enum member name cannot contain `:` + * either, so the emitted keys can never equal the values. Verified 2026-07-27 + * against TypeSpec 1.10. Affects only `OAuthScope` — the sole enum whose + * values are not valid identifiers. */ function normalizeEnumDescriptions( descriptions: Record | undefined, enumValues: string[] | undefined diff --git a/apps/docs/lib/updates-parser.ts b/apps/docs/lib/updates-parser.ts index e047678a8..fa3ec77ff 100644 --- a/apps/docs/lib/updates-parser.ts +++ b/apps/docs/lib/updates-parser.ts @@ -52,7 +52,14 @@ export function loadUpdates(): ParsedUpdate[] { for (const file of files) { const fileContent = fs.readFileSync(path.join(updatesDir, file), 'utf-8'); const { data, content } = matter(fileContent); - const date = String(data.date || file.replace(/\.md$/, '')); + // An unquoted `date: 2026-07-24` is parsed by js-yaml as a Date, and + // String() would turn it into "Fri Jul 24 2026 03:00:00 GMT+0300 (…)" — + // which then leaks into sorting, grouping keys and URL segments. + const rawDate = data.date; + const date = + rawDate instanceof Date + ? rawDate.toISOString().slice(0, 10) + : String(rawDate || file.replace(/\.md$/, '')); const title = String(data.title || 'Обновление'); updates.push({ @@ -139,9 +146,11 @@ export function groupTimelineByDate(entries: TimelineEntry[]): DateGroup[] { * Check if update is "new" (within last 7 days) */ export function isNewUpdate(dateStr: string): boolean { - const updateDate = new Date(dateStr); - const now = new Date(); - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(now.getDate() - 7); - return updateDate >= oneWeekAgo; + // Both sides in UTC at day granularity. `new Date("2026-07-24")` is UTC + // midnight while a plain `new Date()` carries the local wall clock, so + // comparing them made the badge flip on and off around the boundary. + const cutoff = new Date(); + cutoff.setUTCHours(0, 0, 0, 0); + cutoff.setUTCDate(cutoff.getUTCDate() - 7); + return new Date(`${dateStr}T00:00:00Z`) >= cutoff; } diff --git a/apps/docs/package.json b/apps/docs/package.json index 3d302e74e..4bfdabe3d 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -14,6 +14,8 @@ "generate-llms": "bun scripts/generate-llms.ts", "check-urls": "node scripts/check-url-conflicts.mjs", "check-models": "node scripts/check-models-coverage.mjs", + "check-examples": "node scripts/check-examples.mjs", + "check-anchors": "node scripts/check-anchors.mjs", "check-n8n-resources": "node scripts/check-n8n-resources.mjs" }, "dependencies": { diff --git a/apps/docs/proxy.ts b/apps/docs/proxy.ts index 6b78dacf4..aa6e97413 100644 --- a/apps/docs/proxy.ts +++ b/apps/docs/proxy.ts @@ -10,7 +10,9 @@ function markdownTwin(pathname: string): string | null { return `${pathname.replace(/\/+$/, '')}.md`; } if (pathname.startsWith('/guides/') || pathname.startsWith('/api/')) { - if (pathname.startsWith('/api/search') || pathname.startsWith('/api/og')) return null; + // No /api/search or /api/og exclusion here: those route handlers moved to + // /internal/* (already excluded by the matcher below), while /api/search/* + // are real documentation pages with real .md twins in public/api/search/. if (pathname.endsWith('.md')) return null; return `${pathname.replace(/\/+$/, '')}.md`; } diff --git a/apps/docs/public/.well-known/agent-skills/index.json b/apps/docs/public/.well-known/agent-skills/index.json index a19b90449..76306453c 100644 --- a/apps/docs/public/.well-known/agent-skills/index.json +++ b/apps/docs/public/.well-known/agent-skills/index.json @@ -6,49 +6,49 @@ "type": "skill-md", "description": "Pachca — МОЙ профиль, МОЙ статус, кастомные поля. Всегда только про себя — без параметров, данные определяются по токену. Используй, когда пользователь хочет получить свой профиль, узнать кто он, установить или убрать свой статус, посмотреть свой email/отдел, или узнать какие кастомные/дополнительные поля существуют (custom_properties). Также для запросов «кто я», «мой аккаунт», «мой email». НЕ для управления другими сотрудниками, НЕ для изменения статуса другого сотрудника, НЕ для информации о токене и его скоупах (используй pachca-oauth).", "url": "/.well-known/skills/pachca-profile/SKILL.md", - "digest": "sha256:68182344ba83f8ee3fdb0e07230277a5911afa64d4eadb81a04294af42198baa" + "digest": "sha256:9d9732cac0703d48bbec753effd351aa1e8986ad95df213cac55204f3c4cd538" }, { "name": "pachca-oauth", "type": "skill-md", "description": "Pachca — информация о текущем OAuth-токене: его скоупы (права доступа), даты создания и последнего использования, тип владельца (пользователь или бот). Используй, когда пользователь хочет проверить токен, узнать какие у токена скоупы/права, чей это токен, когда токен создан или последний раз использовался. НЕ для управления своим профилем или статусом (используй pachca-profile), НЕ для выпуска или ротации токенов ботов (используй pachca-bots).", "url": "/.well-known/skills/pachca-oauth/SKILL.md", - "digest": "sha256:e72b18c4d6fb14d30eea6804a5945e2944e5e645e5c0bb4e0779c61721beb753" + "digest": "sha256:1af3e43a5aacbe508570e6ed8f8387730f0d219c46fcdd0c10631f99fded5903" }, { "name": "pachca-users", "type": "skill-md", "description": "Pachca — управление сотрудниками (участниками пространства) и тегами (группами). Используй, когда пользователь хочет вывести список сотрудников, создать, обновить, заблокировать или удалить сотрудника, установить статус другому сотруднику по ID, управлять тегами/группами, назначить теги или провести онбординг/оффбординг. НЕ для своего профиля или своего статуса (используй pachca-profile), НЕ для поиска сотрудника по имени (используй pachca-search).", "url": "/.well-known/skills/pachca-users/SKILL.md", - "digest": "sha256:d013329694eff9fd49183e6644a15dd7320f9b4e1a29ff3bd96c6da5eb0ce960" + "digest": "sha256:71fd3f3ece66739ea164d04ec16c5ad6316c75190499f19cd63e5a46c9504ecd" }, { "name": "pachca-chats", "type": "skill-md", "description": "Pachca — управление чатами, каналами и беседами. Используй этот скилл, когда пользователь хочет создать канал, создать беседу, вывести или архивировать чаты, добавить или удалить участников, изменить роли участников, экспортировать историю чата или проверить настройки чата. НЕ для отправки сообщений или ответов в тред.", "url": "/.well-known/skills/pachca-chats/SKILL.md", - "digest": "sha256:0b522a8aacd9aa6327655c85527131a3af6812b6521c47e3999745ac07c99d0f" + "digest": "sha256:4aa6b616f60a03906d10694fed7bcc9926bbf8c40d4d6ed07adb2ffc51d59793" }, { "name": "pachca-messages", "type": "skill-md", "description": "Pachca — сообщения: отправка, редактирование, удаление. Используй этот скилл, когда пользователь хочет отправить сообщение, написать в чат или в личку, ответить в тред, прикрепить файл, поставить реакцию, закрепить сообщение, получить историю сообщений, изменить или удалить сообщение, узнать кто прочитал или отправить сообщение с кнопками. Также для упоминаний (@), уведомлений и подписки на тред. НЕ для создания каналов, управления участниками или настройки ботов.", "url": "/.well-known/skills/pachca-messages/SKILL.md", - "digest": "sha256:59313a2f91485919784950b4f61af5ce7a2ef9aec6c36d4866eb08113e89b4f6" + "digest": "sha256:9dae5f0ed957fa51f1abd412f28ffb8a8c160a84e4dd6c9d245a5ffc80289028" }, { "name": "pachca-bots", "type": "skill-md", "description": "Pachca — управление ботами и вебхуки. Используй этот скилл, когда пользователь хочет настроить бота, создать бота, настроить вебхуки, обработать вебхук, проверить подпись вебхука (X-Signature), обработать callback нажатия кнопки или создать дайджест-бота. НЕ для отправки обычных сообщений, показа форм или модальных окон. Разворачивание ссылок (unfurl) — в pachca-messages.", "url": "/.well-known/skills/pachca-bots/SKILL.md", - "digest": "sha256:23811c63a3077aee97ee48a25ffd3156152e4619db23103de88014a1bbffc3ee" + "digest": "sha256:368bed4512a086cee15ceca0e6482f368a20d6fca7a1935a791638213f96cfe1" }, { "name": "pachca-forms", "type": "skill-md", "description": "Pachca — интерактивные формы и модальные окна для ботов. Создание форм, модальных окон, опросов, анкет и заявок с полями ввода, выпадающими списками, чекбоксами, выбором даты/времени, загрузкой файлов. Используй, когда пользователь хочет показать форму, открыть модальное окно, создать опрос или анкету, обработать отправку формы (view_submission) или валидацию полей. Также для trigger_id и dropdown/select. Требует токен бота. НЕ для инлайн-кнопок в сообщениях или настройки вебхуков.", "url": "/.well-known/skills/pachca-forms/SKILL.md", - "digest": "sha256:531506cbf1a12b8a747fdfdac4e833350288b7d98ae0879ce3060b94886d748d" + "digest": "sha256:63ef875415635558f73ef3b549b0c7f266f1a80b8e26e20f2aaa12464d80eb1f" }, { "name": "pachca-tasks", @@ -62,7 +62,7 @@ "type": "skill-md", "description": "Pachca — полнотекстовый поиск по сотрудникам, чатам и сообщениям. Используй этот скилл, когда пользователь хочет найти что-то — найти сотрудника по имени, найти сообщение по тексту, найти чат по названию или узнать где обсуждали тему. Также когда пользователь спрашивает «найди сотрудника», «где обсуждали X», «найди сообщения про Y» или любой запрос с поиском/нахождением контента. НЕ для вывода всех сотрудников, всех чатов или отправки сообщений.", "url": "/.well-known/skills/pachca-search/SKILL.md", - "digest": "sha256:b22e98368273a44d07cd520a2fd5aa5eb28a14bf79936ddcdd179addcd57cb39" + "digest": "sha256:80358daa33cf103253c1ceeabbf6a29377467e39cddd9eb2421d38ef11b348ca" }, { "name": "pachca-security", diff --git a/apps/docs/public/.well-known/api-catalog b/apps/docs/public/.well-known/api-catalog deleted file mode 100644 index 58a2125a2..000000000 --- a/apps/docs/public/.well-known/api-catalog +++ /dev/null @@ -1,54 +0,0 @@ -{ - "linkset": [ - { - "anchor": "https://dev.pachca.com", - "service-desc": [ - { - "href": "https://dev.pachca.com/openapi.yaml", - "type": "application/yaml", - "title": "Pachca API — OpenAPI 3.1 specification" - }, - { - "href": "https://dev.pachca.com/pachca.postman_collection.json", - "type": "application/json", - "title": "Pachca API — Postman collection" - }, - { - "href": "https://dev.pachca.com/workflows.arazzo.yaml", - "type": "application/yaml", - "title": "Pachca API — Arazzo workflows" - } - ], - "service-doc": [ - { - "href": "https://dev.pachca.com", - "type": "text/html", - "title": "Pachca developer documentation", - "hreflang": ["ru", "en"] - }, - { - "href": "https://dev.pachca.com/llms.txt", - "type": "text/plain", - "title": "Agent-friendly guide and index" - }, - { - "href": "https://dev.pachca.com/llms-full.txt", - "type": "text/plain", - "title": "Agent-friendly full documentation" - } - ], - "service-meta": [ - { - "href": "https://dev.pachca.com/.well-known/skills/index.json", - "type": "application/json", - "title": "Pachca Skills discovery (agentskills.io 0.2.0)" - }, - { - "href": "https://dev.pachca.com/.well-known/agent-skills/index.json", - "type": "application/json", - "title": "Pachca Skills discovery (agent-skills, legacy alias)" - } - ] - } - ] -} diff --git a/apps/docs/public/.well-known/skills/index.json b/apps/docs/public/.well-known/skills/index.json index a19b90449..76306453c 100644 --- a/apps/docs/public/.well-known/skills/index.json +++ b/apps/docs/public/.well-known/skills/index.json @@ -6,49 +6,49 @@ "type": "skill-md", "description": "Pachca — МОЙ профиль, МОЙ статус, кастомные поля. Всегда только про себя — без параметров, данные определяются по токену. Используй, когда пользователь хочет получить свой профиль, узнать кто он, установить или убрать свой статус, посмотреть свой email/отдел, или узнать какие кастомные/дополнительные поля существуют (custom_properties). Также для запросов «кто я», «мой аккаунт», «мой email». НЕ для управления другими сотрудниками, НЕ для изменения статуса другого сотрудника, НЕ для информации о токене и его скоупах (используй pachca-oauth).", "url": "/.well-known/skills/pachca-profile/SKILL.md", - "digest": "sha256:68182344ba83f8ee3fdb0e07230277a5911afa64d4eadb81a04294af42198baa" + "digest": "sha256:9d9732cac0703d48bbec753effd351aa1e8986ad95df213cac55204f3c4cd538" }, { "name": "pachca-oauth", "type": "skill-md", "description": "Pachca — информация о текущем OAuth-токене: его скоупы (права доступа), даты создания и последнего использования, тип владельца (пользователь или бот). Используй, когда пользователь хочет проверить токен, узнать какие у токена скоупы/права, чей это токен, когда токен создан или последний раз использовался. НЕ для управления своим профилем или статусом (используй pachca-profile), НЕ для выпуска или ротации токенов ботов (используй pachca-bots).", "url": "/.well-known/skills/pachca-oauth/SKILL.md", - "digest": "sha256:e72b18c4d6fb14d30eea6804a5945e2944e5e645e5c0bb4e0779c61721beb753" + "digest": "sha256:1af3e43a5aacbe508570e6ed8f8387730f0d219c46fcdd0c10631f99fded5903" }, { "name": "pachca-users", "type": "skill-md", "description": "Pachca — управление сотрудниками (участниками пространства) и тегами (группами). Используй, когда пользователь хочет вывести список сотрудников, создать, обновить, заблокировать или удалить сотрудника, установить статус другому сотруднику по ID, управлять тегами/группами, назначить теги или провести онбординг/оффбординг. НЕ для своего профиля или своего статуса (используй pachca-profile), НЕ для поиска сотрудника по имени (используй pachca-search).", "url": "/.well-known/skills/pachca-users/SKILL.md", - "digest": "sha256:d013329694eff9fd49183e6644a15dd7320f9b4e1a29ff3bd96c6da5eb0ce960" + "digest": "sha256:71fd3f3ece66739ea164d04ec16c5ad6316c75190499f19cd63e5a46c9504ecd" }, { "name": "pachca-chats", "type": "skill-md", "description": "Pachca — управление чатами, каналами и беседами. Используй этот скилл, когда пользователь хочет создать канал, создать беседу, вывести или архивировать чаты, добавить или удалить участников, изменить роли участников, экспортировать историю чата или проверить настройки чата. НЕ для отправки сообщений или ответов в тред.", "url": "/.well-known/skills/pachca-chats/SKILL.md", - "digest": "sha256:0b522a8aacd9aa6327655c85527131a3af6812b6521c47e3999745ac07c99d0f" + "digest": "sha256:4aa6b616f60a03906d10694fed7bcc9926bbf8c40d4d6ed07adb2ffc51d59793" }, { "name": "pachca-messages", "type": "skill-md", "description": "Pachca — сообщения: отправка, редактирование, удаление. Используй этот скилл, когда пользователь хочет отправить сообщение, написать в чат или в личку, ответить в тред, прикрепить файл, поставить реакцию, закрепить сообщение, получить историю сообщений, изменить или удалить сообщение, узнать кто прочитал или отправить сообщение с кнопками. Также для упоминаний (@), уведомлений и подписки на тред. НЕ для создания каналов, управления участниками или настройки ботов.", "url": "/.well-known/skills/pachca-messages/SKILL.md", - "digest": "sha256:59313a2f91485919784950b4f61af5ce7a2ef9aec6c36d4866eb08113e89b4f6" + "digest": "sha256:9dae5f0ed957fa51f1abd412f28ffb8a8c160a84e4dd6c9d245a5ffc80289028" }, { "name": "pachca-bots", "type": "skill-md", "description": "Pachca — управление ботами и вебхуки. Используй этот скилл, когда пользователь хочет настроить бота, создать бота, настроить вебхуки, обработать вебхук, проверить подпись вебхука (X-Signature), обработать callback нажатия кнопки или создать дайджест-бота. НЕ для отправки обычных сообщений, показа форм или модальных окон. Разворачивание ссылок (unfurl) — в pachca-messages.", "url": "/.well-known/skills/pachca-bots/SKILL.md", - "digest": "sha256:23811c63a3077aee97ee48a25ffd3156152e4619db23103de88014a1bbffc3ee" + "digest": "sha256:368bed4512a086cee15ceca0e6482f368a20d6fca7a1935a791638213f96cfe1" }, { "name": "pachca-forms", "type": "skill-md", "description": "Pachca — интерактивные формы и модальные окна для ботов. Создание форм, модальных окон, опросов, анкет и заявок с полями ввода, выпадающими списками, чекбоксами, выбором даты/времени, загрузкой файлов. Используй, когда пользователь хочет показать форму, открыть модальное окно, создать опрос или анкету, обработать отправку формы (view_submission) или валидацию полей. Также для trigger_id и dropdown/select. Требует токен бота. НЕ для инлайн-кнопок в сообщениях или настройки вебхуков.", "url": "/.well-known/skills/pachca-forms/SKILL.md", - "digest": "sha256:531506cbf1a12b8a747fdfdac4e833350288b7d98ae0879ce3060b94886d748d" + "digest": "sha256:63ef875415635558f73ef3b549b0c7f266f1a80b8e26e20f2aaa12464d80eb1f" }, { "name": "pachca-tasks", @@ -62,7 +62,7 @@ "type": "skill-md", "description": "Pachca — полнотекстовый поиск по сотрудникам, чатам и сообщениям. Используй этот скилл, когда пользователь хочет найти что-то — найти сотрудника по имени, найти сообщение по тексту, найти чат по названию или узнать где обсуждали тему. Также когда пользователь спрашивает «найди сотрудника», «где обсуждали X», «найди сообщения про Y» или любой запрос с поиском/нахождением контента. НЕ для вывода всех сотрудников, всех чатов или отправки сообщений.", "url": "/.well-known/skills/pachca-search/SKILL.md", - "digest": "sha256:b22e98368273a44d07cd520a2fd5aa5eb28a14bf79936ddcdd179addcd57cb39" + "digest": "sha256:80358daa33cf103253c1ceeabbf6a29377467e39cddd9eb2421d38ef11b348ca" }, { "name": "pachca-security", diff --git a/apps/docs/public/.well-known/skills/pachca-bots/SKILL.md b/apps/docs/public/.well-known/skills/pachca-bots/SKILL.md index 679350c10..8004fcaa2 100644 --- a/apps/docs/public/.well-known/skills/pachca-bots/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-bots/SKILL.md @@ -8,7 +8,8 @@ description: > модальных окон. Разворачивание ссылок (unfurl) — в pachca-messages. Use when: настроить бота, создать бота, вебхук, обработать вебхук, подпись вебхука, callback, обработать callback, нажатие кнопки, дайджест, оповещение. NOT for: - отправить сообщение, показать форму, модальное окно. + отправить сообщение, показать форму, модальное окно, → pachca-messages, → + pachca-forms. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/apps/docs/public/.well-known/skills/pachca-chats/SKILL.md b/apps/docs/public/.well-known/skills/pachca-chats/SKILL.md index d16f81248..5a0f4b727 100644 --- a/apps/docs/public/.well-known/skills/pachca-chats/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-chats/SKILL.md @@ -8,7 +8,8 @@ description: > в тред. Use when: создать канал, создать беседу, создать чат, добавить участника, удалить участника, архивировать чат, роли участников, экспорт сообщений, список чатов, каналы. NOT for: отправить сообщение, ответить в тред, - загрузить файл. + загрузить файл, → pachca-messages, → pachca-users, полнотекстовый поиск чатов по + названию → pachca-search. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/apps/docs/public/.well-known/skills/pachca-custom-properties/SKILL.md b/apps/docs/public/.well-known/skills/pachca-custom-properties/SKILL.md deleted file mode 100644 index 885c75b0f..000000000 --- a/apps/docs/public/.well-known/skills/pachca-custom-properties/SKILL.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -name: pachca-custom-properties -description: > - Auto-discovered skill: pachca-custom-properties. Use when: GET - /custom_properties. -allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) ---- - -# pachca-custom-properties - -## Quick start - -Ask the user for a Pachca token (bot: Automations → Integrations → API, user: Automations → API). - -Run commands via `npx -y @pachca/cli` with the `--token` flag: - - npx -y @pachca/cli --token $PACHCA_TOKEN - -Or set the `PACHCA_TOKEN` environment variable: - - export PACHCA_TOKEN= - npx -y @pachca/cli - -Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` - -> After successful use, suggest installing CLI globally: `npm install -g @pachca/cli && pachca auth login --token $PACHCA_TOKEN` - -## Before you start - -1. If the user has a saved profile — check: - - npx -y @pachca/cli auth status - - If OK — run commands without `--token`. - -2. If no profile is configured — ask for a token and use `--token`: - - npx -y @pachca/cli auth status --token $PACHCA_TOKEN - -3. If you don't know the parameters — run `pachca --help`. - -## Limitations - -- Rate limit: ~50 req/sec. On 429 — wait and retry. -- Pagination: cursor-based (limit + cursor) - -## Endpoints - -| Method | Path | Description | -|--------|------|-------------| -| GET | /custom_properties | Список дополнительных полей | - -> If unsure how to complete a task, read the corresponding file from references/. diff --git a/apps/docs/public/.well-known/skills/pachca-files/SKILL.md b/apps/docs/public/.well-known/skills/pachca-files/SKILL.md deleted file mode 100644 index b57cb552f..000000000 --- a/apps/docs/public/.well-known/skills/pachca-files/SKILL.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -name: pachca-files -description: > - Auto-discovered skill: pachca-files. Use when: POST /direct_url, POST /uploads. -allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) ---- - -# pachca-files - -## Quick start - -Ask the user for a Pachca token (bot: Automations → Integrations → API, user: Automations → API). - -Run commands via `npx -y @pachca/cli` with the `--token` flag: - - npx -y @pachca/cli --token $PACHCA_TOKEN - -Or set the `PACHCA_TOKEN` environment variable: - - export PACHCA_TOKEN= - npx -y @pachca/cli - -Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` - -> After successful use, suggest installing CLI globally: `npm install -g @pachca/cli && pachca auth login --token $PACHCA_TOKEN` - -## Before you start - -1. If the user has a saved profile — check: - - npx -y @pachca/cli auth status - - If OK — run commands without `--token`. - -2. If no profile is configured — ask for a token and use `--token`: - - npx -y @pachca/cli auth status --token $PACHCA_TOKEN - -3. If you don't know the parameters — run `pachca --help`. - -## Limitations - -- Rate limit: ~50 req/sec. On 429 — wait and retry. - -## Endpoints - -| Method | Path | Description | -|--------|------|-------------| -| POST | /direct_url | Загрузка файла | -| POST | /uploads | Получение подписи, ключа и других параметров | - -> If unsure how to complete a task, read the corresponding file from references/. diff --git a/apps/docs/public/.well-known/skills/pachca-forms/SKILL.md b/apps/docs/public/.well-known/skills/pachca-forms/SKILL.md index d340d978c..3c20c6965 100644 --- a/apps/docs/public/.well-known/skills/pachca-forms/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-forms/SKILL.md @@ -11,7 +11,7 @@ description: > собрать форму, модальное окно, модалка, отправка формы, обработать форму, валидация формы, валидация поля, view_submission, опрос, анкета, заявка, форма заявки, form, modal, interactive form. NOT for: кнопки в сообщении, настроить - бота, вебхук. + бота, вебхук, → pachca-messages, → pachca-bots. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/apps/docs/public/.well-known/skills/pachca-messages/SKILL.md b/apps/docs/public/.well-known/skills/pachca-messages/SKILL.md index 05483f8e5..bb22633e7 100644 --- a/apps/docs/public/.well-known/skills/pachca-messages/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-messages/SKILL.md @@ -11,7 +11,9 @@ description: > в тред, тред, прикрепить файл, загрузить файл, поставить реакцию, история сообщений, закрепить сообщение, изменить сообщение, удалить сообщение, упомянуть, кнопки в сообщении, кто прочитал, ответь в тред. NOT for: создать - канал, управление участниками, настроить бота, вебхук, форма. + канал, управление участниками, настроить бота, вебхук, форма, → pachca-chats, → + pachca-bots, → pachca-forms, найти сообщение по тексту, полнотекстовый поиск → + pachca-search. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- @@ -96,7 +98,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` 1. Получи или создай тред, возьми `thread.id` из ответа: ```bash - pachca thread add + pachca threads add ``` > Если тред уже существует, вернётся существующий @@ -164,7 +166,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` 1. Получи или создай тред, возьми `chat_id` из ответа: ```bash - pachca thread add + pachca threads add ``` 2. Добавь бота в участники чата треда: @@ -275,6 +277,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` | Method | Path | Description | |--------|------|-------------| +| POST | /direct_url | Загрузка файла | | POST | /messages | Новое сообщение | | GET | /messages | Список сообщений чата | | GET | /messages/{id} | Информация о сообщении | @@ -291,6 +294,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` | POST | /threads | Новый самостоятельный тред | | GET | /threads | Список тредов | | GET | /threads/{id} | Информация о треде | +| POST | /uploads | Получение подписи, ключа и других параметров | ## Advanced workflows diff --git a/apps/docs/public/.well-known/skills/pachca-oauth/SKILL.md b/apps/docs/public/.well-known/skills/pachca-oauth/SKILL.md index af8bbdd31..a6a27dc18 100644 --- a/apps/docs/public/.well-known/skills/pachca-oauth/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-oauth/SKILL.md @@ -8,7 +8,8 @@ description: > НЕ для управления своим профилем или статусом (используй pachca-profile), НЕ для выпуска или ротации токенов ботов (используй pachca-bots). Use when: информация о токене, проверить токен, скоупы токена, права токена, чей токен, token info. - NOT for: мой профиль, мой статус, создать бота, ротация токена. + NOT for: мой профиль, мой статус, создать бота, ротация токена, → + pachca-profile, → pachca-bots. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/apps/docs/public/.well-known/skills/pachca-profile/SKILL.md b/apps/docs/public/.well-known/skills/pachca-profile/SKILL.md index d32dab808..6c36a8c42 100644 --- a/apps/docs/public/.well-known/skills/pachca-profile/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-profile/SKILL.md @@ -10,7 +10,8 @@ description: > сотрудника, НЕ для информации о токене и его скоупах (используй pachca-oauth). Use when: мой профиль, покажи профиль, мой статус, установить статус, убрать статус, кто я, мой email, мои данные, дополнительные поля, кастомные поля. NOT - for: сотрудники, список сотрудников, создать сотрудника, статус сотрудника. + for: сотрудники, список сотрудников, создать сотрудника, статус сотрудника, → + pachca-users, → pachca-oauth. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- @@ -130,6 +131,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` | Method | Path | Description | |--------|------|-------------| +| GET | /custom_properties | Список дополнительных полей | | GET | /profile | Свой профиль | | PUT | /profile/avatar | Загрузка своего аватара | | DELETE | /profile/avatar | Удаление своего аватара | diff --git a/apps/docs/public/.well-known/skills/pachca-search/SKILL.md b/apps/docs/public/.well-known/skills/pachca-search/SKILL.md index dc35a88e7..63f86f4db 100644 --- a/apps/docs/public/.well-known/skills/pachca-search/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-search/SKILL.md @@ -9,7 +9,7 @@ description: > всех сотрудников, всех чатов или отправки сообщений. Use when: поиск, найти сообщение, найти чат, найти сотрудника, искать, где обсуждали, кто писал, полнотекстовый поиск. NOT for: список сотрудников, список чатов, отправить - сообщение. + сообщение, → pachca-users, → pachca-chats. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/apps/docs/public/.well-known/skills/pachca-users/SKILL.md b/apps/docs/public/.well-known/skills/pachca-users/SKILL.md index 38beebf08..668345c3a 100644 --- a/apps/docs/public/.well-known/skills/pachca-users/SKILL.md +++ b/apps/docs/public/.well-known/skills/pachca-users/SKILL.md @@ -10,7 +10,9 @@ description: > Use when: сотрудник, сотрудники, список сотрудников, создать сотрудника, заблокировать сотрудника, уволить сотрудника, тег, теги, группа сотрудников, добавить в тег, онбординг, оффбординг. NOT for: мой профиль, мой статус, найди - сотрудника, найти сотрудника, кастомные поля, дополнительные поля. + сотрудника, найти сотрудника, кастомные поля, дополнительные поля, получить + профиль, мой профиль, установить свой статус → pachca-profile, → pachca-chats, + найти сообщение по тексту, полнотекстовый поиск → pachca-search. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/apps/docs/public/api/authorization.md b/apps/docs/public/api/authorization.md index 042bbdf1b..f9b5164c0 100644 --- a/apps/docs/public/api/authorization.md +++ b/apps/docs/public/api/authorization.md @@ -80,7 +80,7 @@ Бот виден в пространстве как отдельный участник со своим именем и аватаром. Получить его `access_token` можно двумя способами: - **В интерфейсе** — во вкладке **API** в настройках бота. -- **Через API** — методом [Новый бот](POST /bots): он создаёт бота и сразу возвращает `access_token`. Сохраните токен из ответа — повторно получить его можно только через интерфейс. +- **Через API** — методом [Новый бот](/api/bots/create): он создаёт бота и сразу возвращает `access_token`. Сохраните токен из ответа — повторно получить его можно только через интерфейс. Подробнее о создании и настройке бота — в разделе [Боты](/guides/bots/overview). @@ -88,16 +88,16 @@ Некоторые возможности API доступны исключительно с токеном бота: -- [Удаление события](DELETE /webhooks/events/{id}) — удаление события из истории событий бота -- [Саморегистрация вебхука бота](PUT /bot/webhook) — бот сам меняет `URL` своего исходящего вебхука -- [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) — создание предпросмотров ссылок в сообщениях -- [Открытие представления](POST /views/open) — открытие модального окна с формой для пользователя +- [Удаление события](/api/bots/remove-event) — удаление события из истории событий бота +- [Саморегистрация вебхука бота](/api/bots/update-webhook) — бот сам меняет `URL` своего исходящего вебхука +- [Unfurl (разворачивание ссылок)](/api/messages/unfurl) — создание предпросмотров ссылок в сообщениях +- [Открытие представления](/api/views/open) — открытие модального окна с формой для пользователя -Также при отправке сообщений ([Новое сообщение](POST /messages), [Новый тред](POST /messages/{id}/thread)) поля `icon_url` и `name` для кастомного аватара и имени отправителя работают только с токеном бота. +Также при отправке сообщений ([Новое сообщение](/api/messages/create), [Новый тред](/api/threads/add)) поля `icon_url` и `name` для кастомного аватара и имени отправителя работают только с токеном бота. ## Заголовок авторизации -Все запросы к API (кроме [Загрузки файла](POST /direct_url)) должны содержать заголовок: +Все запросы к API (кроме [Загрузки файла](/api/files/direct-url)) должны содержать заголовок: ```http title="Заголовок авторизации" Authorization: Bearer @@ -114,11 +114,11 @@ Authorization: Bearer Скоупы определяют, к каким методам API имеет доступ токен. Разные типы токенов получают скоупы по-разному: - **Персональный токен** — вы выбираете скоупы вручную при создании и можете изменить их позже в настройках токена. Токен получит только запрошенные разрешения. -- **Токен бота** — скоупы можно выбрать при создании или редактировании бота (параметр `scopes` в методах [Новый бот](POST /bots) и [Редактирование бота](PUT /bots/{id}) либо во вкладке «API» настроек бота). Если скоупы не указаны, бот получает набор по умолчанию. +- **Токен бота** — скоупы можно выбрать при создании или редактировании бота (параметр `scopes` в методах [Новый бот](/api/bots/create) и [Редактирование бота](/api/bots/update) либо во вкладке «API» настроек бота). Если скоупы не указаны, бот получает набор по умолчанию. -Боту доступны и собственные скоупы самоуправления, недоступные персональным токенам: `bot_self:webhook:write` — бот сам меняет `URL` своего исходящего вебхука методом [Саморегистрация вебхука бота](PUT /bot/webhook), и `bot_self:write` — самостоятельное управление настройками бота. +Боту доступны и собственные скоупы самоуправления, недоступные персональным токенам: `bot_self:webhook:write` — бот сам меняет `URL` своего исходящего вебхука методом [Саморегистрация вебхука бота](/api/bots/update-webhook), и `bot_self:write` — самостоятельное управление настройками бота. -Проверить скоупы текущего токена можно методом [Информация о токене](GET /oauth/token/info). +Проверить скоупы текущего токена можно методом [Информация о токене](/api/oauth/token-info). ### Доступные скоупы diff --git a/apps/docs/public/api/bots/create.md b/apps/docs/public/api/bots/create.md index a0ba38abb..14b0cb587 100644 --- a/apps/docs/public/api/bots/create.md +++ b/apps/docs/public/api/bots/create.md @@ -24,13 +24,13 @@ - `webhook: object` (required) — Объект параметров вебхука создаваемого бота - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.. Пример: `"tasks_bot"` + - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`. Пример: `"tasks_bot"` - `outgoing_url: string` — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.. Пример: `["/task","/help"]` - - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.. Пример: `["messages:create"]` + - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов. Пример: `["/task","/help"]` + - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя. Пример: `["messages:create"]` - `template: string` — Шаблон форматирования входящего вебхука. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики @@ -40,8 +40,8 @@ - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - `who_can_add: string` — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` - - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.. Пример: `false` + - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` + - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется. Пример: `false` ### Пример @@ -54,17 +54,12 @@ "events": [ "message_new" ], + "trigger_on": "commands", "commands": [ - "/task", - "/help" + "/task" ], "scopes": [ "messages:create" - ], - "template": "Заказ от {{ client }} на сумму {{ amount }} ₽", - "challenge_key": "challenge", - "can_edit": [ - "admin" ] } } @@ -84,17 +79,12 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ "events": [ "message_new" ], + "trigger_on": "commands", "commands": [ - "/task", - "/help" + "/task" ], "scopes": [ "messages:create" - ], - "template": "Заказ от {{ client }} на сумму {{ amount }} ₽", - "challenge_key": "challenge", - "can_edit": [ - "admin" ] } }' @@ -111,24 +101,24 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `"bm90X2FfcmVhbF90b2tlbg"` + - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `"bm90X2FfcmVhbF90b2tlbg"` **Пример ответа:** @@ -173,11 +163,11 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -219,11 +209,11 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/delete.md b/apps/docs/public/api/bots/delete.md index 78dbb552f..3e4a34291 100644 --- a/apps/docs/public/api/bots/delete.md +++ b/apps/docs/public/api/bots/delete.md @@ -56,11 +56,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -102,11 +102,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/get.md b/apps/docs/public/api/bots/get.md index a716a4868..08a659e3b 100644 --- a/apps/docs/public/api/bots/get.md +++ b/apps/docs/public/api/bots/get.md @@ -37,21 +37,21 @@ curl "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости @@ -113,11 +113,11 @@ curl "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -159,11 +159,11 @@ curl "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/list-events.md b/apps/docs/public/api/bots/list-events.md index d7978da8e..74b075c7e 100644 --- a/apps/docs/public/api/bots/list-events.md +++ b/apps/docs/public/api/bots/list-events.md @@ -58,8 +58,8 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `url: string` (required) — Прямая ссылка на сообщение. Пример: `"https://pachca.com/chats/1245817/messages/5678"` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012` - - `parent_message_id: integer, int32` — Идентификатор сообщения, к которому написан ответ. Пример: `3456` - - `thread: object` — Объект с параметрами треда + - `parent_message_id: integer, int32` (nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `3456` + - `thread: object` — Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение. - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -68,12 +68,12 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ Значения: `reaction` — Для реакций всегда reaction - `event: string` (required) — Тип события Значения: `new` — Создание, `delete` — Удаление - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.. Пример: `9012` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`. Пример: `9012` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817` - `code: string` (required) — Emoji символ реакции. Пример: `"👍"` - `name: string` (required) — Название реакции. Пример: `"thumbsup"` - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345` - - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.. Пример: `"2025-05-15T14:30:00.000Z"` + - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - **ButtonWebhookPayload**: Структура исходящего вебхука о нажатии кнопки - `type: string` (required) — Тип объекта. Пример: `"button"` @@ -91,11 +91,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы - - `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` - - `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` + - `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` + - `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` - - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные + - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` @@ -105,7 +105,7 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `event: string` (required) — Тип события Значения: `add` — Добавление, `remove` — Удаление - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012` - - `thread_id: integer, int32` — Идентификатор треда. Пример: `5678` + - `thread_id: integer, int32` (nullable) — Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. Пример: `5678` - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]` - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -144,25 +144,25 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438` - - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.. Пример: `"2025-05-15T14:30:00.000Z"` - - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.. Пример: `"2025-05-15T14:45:00.000Z"` - - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.. Пример: `900` + - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished. Пример: `"2025-05-15T14:30:00.000Z"` + - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished. Пример: `"2025-05-15T14:45:00.000Z"` + - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи. Пример: `900` - `members: array of object` — Список участников звонка. Присутствует для события finished. - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345` - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.. Пример: `"2025-05-15T14:45:00.000Z"` - - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready.. Пример: `4567` - - `file_id: integer, int32` — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.. Пример: `89012` - - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready.. Пример: `"https://api.pachca.com/files/89012"` - - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready.. Пример: `10485760` + - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка. Пример: `"2025-05-15T14:45:00.000Z"` + - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready. Пример: `4567` + - `file_id: integer, int32` (nullable) — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан. Пример: `89012` + - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready. Пример: `"https://api.pachca.com/files/89012"` + - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready. Пример: `10485760` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -210,11 +210,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -256,11 +256,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -302,11 +302,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/list.md b/apps/docs/public/api/bots/list.md index f29245df7..9b0c61e0c 100644 --- a/apps/docs/public/api/bots/list.md +++ b/apps/docs/public/api/bots/list.md @@ -40,29 +40,29 @@ curl "https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -101,10 +101,7 @@ curl "https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1" \ ], "meta": { "paginate": { - "next_page": "eyJxZCO2MiwiZGlyIjomSNYjIn3", - "prev_page": "eyJxZCO2MiwiZGlyIjoiYXNjIn0", - "has_next": true, - "has_prev": false + "next_page": "eyJpZCI6MTczODgxNn0" } } } @@ -132,11 +129,11 @@ curl "https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/recreate-token-self.md b/apps/docs/public/api/bots/recreate-token-self.md index ed4bf3461..0efc62abc 100644 --- a/apps/docs/public/api/bots/recreate-token-self.md +++ b/apps/docs/public/api/bots/recreate-token-self.md @@ -32,24 +32,24 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bot/recreate_token" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `"bm90X2FfcmVhbF90b2tlbg"` + - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `"bm90X2FfcmVhbF90b2tlbg"` **Пример ответа:** @@ -110,11 +110,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bot/recreate_token" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -156,11 +156,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bot/recreate_token" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/recreate-token.md b/apps/docs/public/api/bots/recreate-token.md index 086019a65..590023209 100644 --- a/apps/docs/public/api/bots/recreate-token.md +++ b/apps/docs/public/api/bots/recreate-token.md @@ -39,24 +39,24 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token" - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `"bm90X2FfcmVhbF90b2tlbg"` + - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `"bm90X2FfcmVhbF90b2tlbg"` **Пример ответа:** @@ -117,11 +117,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token" - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -163,11 +163,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token" - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/remove-event.md b/apps/docs/public/api/bots/remove-event.md index e692209fe..08d9f4df8 100644 --- a/apps/docs/public/api/bots/remove-event.md +++ b/apps/docs/public/api/bots/remove-event.md @@ -56,11 +56,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/webhooks/events/01KAJZ2XDSS - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -102,11 +102,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/webhooks/events/01KAJZ2XDSS - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/update-webhook.md b/apps/docs/public/api/bots/update-webhook.md index 370cc9a79..5565f1885 100644 --- a/apps/docs/public/api/bots/update-webhook.md +++ b/apps/docs/public/api/bots/update-webhook.md @@ -21,7 +21,7 @@ ### Схема - `webhook: object` (required) — Объект параметров вебхука - - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук.. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук. Пример: `"https://www.website.com/tasks/new"` ### Пример @@ -57,21 +57,21 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости @@ -117,11 +117,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -163,11 +163,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -209,11 +209,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/bots/update.md b/apps/docs/public/api/bots/update.md index e962f3bfb..c9e2438d9 100644 --- a/apps/docs/public/api/bots/update.md +++ b/apps/docs/public/api/bots/update.md @@ -33,13 +33,13 @@ - `webhook: object` (required) — Объект параметров вебхука редактируемого бота - `name: string` (max length: 255) — Имя бота. Пример: `"Бот задач"` - - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.. Пример: `"tasks_bot"` + - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`. Пример: `"tasks_bot"` - `outgoing_url: string` — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.. Пример: `["/task","/help"]` - - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.. Пример: `["messages:create"]` + - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов. Пример: `["/task","/help"]` + - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя. Пример: `["messages:create"]` - `template: string` — Шаблон форматирования входящего вебхука. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики @@ -49,7 +49,7 @@ - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - `who_can_add: string` — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` ### Пример @@ -119,21 +119,21 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости @@ -179,11 +179,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -225,11 +225,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -271,11 +271,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -301,11 +301,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/archive.md b/apps/docs/public/api/chats/archive.md index 8e8c63224..c208a4908 100644 --- a/apps/docs/public/api/chats/archive.md +++ b/apps/docs/public/api/chats/archive.md @@ -70,11 +70,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/archive" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/create.md b/apps/docs/public/api/chats/create.md index b69a82e2a..1ce587981 100644 --- a/apps/docs/public/api/chats/create.md +++ b/apps/docs/public/api/chats/create.md @@ -12,7 +12,7 @@ Метод для создания нового чата. -Для создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](POST /messages). +Для создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](/api/messages/create). При создании чата вы автоматически становитесь участником. @@ -123,11 +123,11 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -169,11 +169,11 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -215,11 +215,11 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/download-export.md b/apps/docs/public/api/chats/download-export.md index 11ca96be2..c0cf6f68f 100644 --- a/apps/docs/public/api/chats/download-export.md +++ b/apps/docs/public/api/chats/download-export.md @@ -78,11 +78,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports/22322" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/get.md b/apps/docs/public/api/chats/get.md index 6555e5d68..af2bc74bf 100644 --- a/apps/docs/public/api/chats/get.md +++ b/apps/docs/public/api/chats/get.md @@ -95,11 +95,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -141,11 +141,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/list.md b/apps/docs/public/api/chats/list.md index f1baa8415..8983998c8 100644 --- a/apps/docs/public/api/chats/list.md +++ b/apps/docs/public/api/chats/list.md @@ -55,9 +55,9 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -101,11 +101,11 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -147,11 +147,11 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -193,11 +193,11 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/request-export.md b/apps/docs/public/api/chats/request-export.md index cd6e96369..4f6497515 100644 --- a/apps/docs/public/api/chats/request-export.md +++ b/apps/docs/public/api/chats/request-export.md @@ -25,7 +25,7 @@ - `start_at: date` (required) — Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `"2025-03-20"` - `end_at: date` (required) — Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `"2025-03-20"` - `webhook_url: string` (required) — Адрес, на который будет отправлен вебхук по завершению экспорта. Пример: `"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2"` -- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.. Пример: `[1381521]` +- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов. Пример: `[1381521]` - `skip_chats_file: boolean` (default: false) — Пропуск формирования файла со списком чатов (chats.json). Пример: `false` ### Пример @@ -67,11 +67,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -116,11 +116,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -149,11 +149,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/unarchive.md b/apps/docs/public/api/chats/unarchive.md index 5c835715f..63e0ad68d 100644 --- a/apps/docs/public/api/chats/unarchive.md +++ b/apps/docs/public/api/chats/unarchive.md @@ -70,11 +70,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/unarchive" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/chats/update.md b/apps/docs/public/api/chats/update.md index 01d8e4ef7..767ef9f7b 100644 --- a/apps/docs/public/api/chats/update.md +++ b/apps/docs/public/api/chats/update.md @@ -109,11 +109,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -155,11 +155,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -201,11 +201,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -231,11 +231,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/custom-properties/list.md b/apps/docs/public/api/custom-properties/list.md index eb0bc6168..f7ee0ee75 100644 --- a/apps/docs/public/api/custom-properties/list.md +++ b/apps/docs/public/api/custom-properties/list.md @@ -63,11 +63,11 @@ curl "https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -109,11 +109,11 @@ curl "https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -155,11 +155,11 @@ curl "https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/errors.md b/apps/docs/public/api/errors.md index ab7133e88..9530d3f30 100644 --- a/apps/docs/public/api/errors.md +++ b/apps/docs/public/api/errors.md @@ -48,11 +48,11 @@ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/file-uploads.md b/apps/docs/public/api/file-uploads.md index 8d75a0d56..0bae13e21 100644 --- a/apps/docs/public/api/file-uploads.md +++ b/apps/docs/public/api/file-uploads.md @@ -12,7 +12,7 @@ ### Шаг 1. Получение параметров загрузки -Сделайте запрос к методу [Получение подписи, ключа и других параметров](POST /uploads) без тела для получения подписи и параметров. Данный метод необходимо использовать для загрузки каждого файла. +Сделайте запрос к методу [Получение подписи, ключа и других параметров](/api/files/uploads) без тела для получения подписи и параметров. Данный метод необходимо использовать для загрузки каждого файла. **Получение параметров загрузки** @@ -27,22 +27,22 @@ curl -X POST "https://api.pachca.com/api/shared/v1/uploads" \ ### Шаг 2. Загрузка файла -Отправьте запрос к методу [Загрузка файла](POST /direct_url) с форматом `multipart/form-data` на адрес `direct_url`. Включите все полученные параметры и сам файл. При успешной загрузке сервер вернёт `HTTP 201 Created`. +Отправьте запрос к методу [Загрузка файла](/api/files/direct-url) с форматом `multipart/form-data` на адрес `direct_url`. Включите все полученные параметры и сам файл. При успешной загрузке сервер вернёт `HTTP 201 Created`. **Загрузка файла** ```bash # URL получается из ответа POST /uploads (поле direct_url) curl "$DIRECT_URL" \ - -F "Content-Disposition=attachment" \ - -F "acl=private" \ - -F "policy=eyJloNBpcmF0aW9u..." \ - -F "x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request" \ - -F "x-amz-algorithm=AWS4-HMAC-SHA256" \ - -F "x-amz-date=20211122T065734Z" \ - -F "x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475" \ - -F "key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/$filename" \ - -F "file=@filename.png" + -F 'Content-Disposition=attachment' \ + -F 'acl=private' \ + -F 'policy=eyJloNBpcmF0aW9u...' \ + -F 'x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request' \ + -F 'x-amz-algorithm=AWS4-HMAC-SHA256' \ + -F 'x-amz-date=20211122T065734Z' \ + -F 'x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475' \ + -F 'key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}' \ + -F 'file=@filename.png' ``` @@ -185,7 +185,7 @@ await client.messages.create_message(MessageCreateRequest( ## Поля multipart-формы для S3 -Все поля из ответа [Получение подписи](POST /uploads) передаются на S3 **как есть** в multipart-форме: +Все поля из ответа [Получение подписи](/api/files/uploads) передаются на S3 **как есть** в multipart-форме: | Поле | Описание | |------|----------| @@ -206,7 +206,7 @@ await client.messages.create_message(MessageCreateRequest( | Ошибка | Причина | Решение | |--------|---------|---------| -| `403 Forbidden` при загрузке | Истекла подпись | Параметры загрузки действительны ограниченное время. Запросите новые через [Получение подписи](POST /uploads) | +| `403 Forbidden` при загрузке | Истекла подпись | Параметры загрузки действительны ограниченное время. Запросите новые через [Получение подписи](/api/files/uploads) | | `400 Bad Request` | Неправильный Content-Type | Убедитесь, что запрос отправляется как `multipart/form-data`, а не `application/json` | | Файл не отображается | Неверный `key` | Проверьте, что `${filename}` в ключе заменён на реальное имя файла | diff --git a/apps/docs/public/api/files/direct-url.md b/apps/docs/public/api/files/direct-url.md index 7841e6d5a..2a25e9bd4 100644 --- a/apps/docs/public/api/files/direct-url.md +++ b/apps/docs/public/api/files/direct-url.md @@ -10,7 +10,7 @@ > Авторизация не требуется -Загрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](POST /uploads). +Загрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](/api/files/uploads). ## Тело запроса @@ -20,14 +20,14 @@ ### Схема -- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) +- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) - `file: binary` (required) — Файл для загрузки @@ -36,15 +36,15 @@ ```bash # URL получается из ответа POST /uploads (поле direct_url) curl "$DIRECT_URL" \ - -F "Content-Disposition=attachment" \ - -F "acl=private" \ - -F "policy=eyJloNBpcmF0aW9u..." \ - -F "x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request" \ - -F "x-amz-algorithm=AWS4-HMAC-SHA256" \ - -F "x-amz-date=20211122T065734Z" \ - -F "x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475" \ - -F "key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/$filename" \ - -F "file=@filename.png" + -F 'Content-Disposition=attachment' \ + -F 'acl=private' \ + -F 'policy=eyJloNBpcmF0aW9u...' \ + -F 'x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request' \ + -F 'x-amz-algorithm=AWS4-HMAC-SHA256' \ + -F 'x-amz-date=20211122T065734Z' \ + -F 'x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475' \ + -F 'key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}' \ + -F 'file=@filename.png' ``` ## Ответы diff --git a/apps/docs/public/api/files/uploads.md b/apps/docs/public/api/files/uploads.md index fc41fae9f..f0ff751b3 100644 --- a/apps/docs/public/api/files/uploads.md +++ b/apps/docs/public/api/files/uploads.md @@ -75,11 +75,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/uploads" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/group-tags/create.md b/apps/docs/public/api/group-tags/create.md index a988ea9ba..0a25a5680 100644 --- a/apps/docs/public/api/group-tags/create.md +++ b/apps/docs/public/api/group-tags/create.md @@ -75,11 +75,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -121,11 +121,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -167,11 +167,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/group-tags/delete.md b/apps/docs/public/api/group-tags/delete.md index c3368247d..4805e3f33 100644 --- a/apps/docs/public/api/group-tags/delete.md +++ b/apps/docs/public/api/group-tags/delete.md @@ -54,11 +54,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -100,11 +100,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/group-tags/get.md b/apps/docs/public/api/group-tags/get.md index 64112a8e5..076dacde8 100644 --- a/apps/docs/public/api/group-tags/get.md +++ b/apps/docs/public/api/group-tags/get.md @@ -73,11 +73,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -119,11 +119,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/group-tags/list-users.md b/apps/docs/public/api/group-tags/list-users.md index c57103673..d4565c544 100644 --- a/apps/docs/public/api/group-tags/list-users.md +++ b/apps/docs/public/api/group-tags/list-users.md @@ -40,45 +40,45 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -144,11 +144,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -190,11 +190,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -236,11 +236,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -266,11 +266,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/group-tags/list.md b/apps/docs/public/api/group-tags/list.md index caa71224d..3743e7456 100644 --- a/apps/docs/public/api/group-tags/list.md +++ b/apps/docs/public/api/group-tags/list.md @@ -42,9 +42,9 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -74,11 +74,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -120,11 +120,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -166,11 +166,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/group-tags/update.md b/apps/docs/public/api/group-tags/update.md index 9f9a18725..ee138666a 100644 --- a/apps/docs/public/api/group-tags/update.md +++ b/apps/docs/public/api/group-tags/update.md @@ -84,11 +84,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -130,11 +130,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -176,11 +176,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -206,11 +206,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/members/add-group-tags.md b/apps/docs/public/api/members/add-group-tags.md index 68e7b3618..db81c26ed 100644 --- a/apps/docs/public/api/members/add-group-tags.md +++ b/apps/docs/public/api/members/add-group-tags.md @@ -66,11 +66,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -128,11 +128,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -158,11 +158,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/members/add.md b/apps/docs/public/api/members/add.md index 0ecffdcd6..8bd73ee5f 100644 --- a/apps/docs/public/api/members/add.md +++ b/apps/docs/public/api/members/add.md @@ -67,11 +67,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -129,11 +129,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -159,11 +159,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/members/leave.md b/apps/docs/public/api/members/leave.md index fd748d605..e494ea5ef 100644 --- a/apps/docs/public/api/members/leave.md +++ b/apps/docs/public/api/members/leave.md @@ -36,11 +36,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/leave" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -98,11 +98,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/leave" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -128,11 +128,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/leave" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/members/list.md b/apps/docs/public/api/members/list.md index 8cf1bae69..440c48a18 100644 --- a/apps/docs/public/api/members/list.md +++ b/apps/docs/public/api/members/list.md @@ -43,45 +43,45 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -147,11 +147,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -209,11 +209,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -239,11 +239,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/members/remove-group-tag.md b/apps/docs/public/api/members/remove-group-tag.md index 48510761a..40be94d5b 100644 --- a/apps/docs/public/api/members/remove-group-tag.md +++ b/apps/docs/public/api/members/remove-group-tag.md @@ -71,11 +71,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/group_tags/86" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/members/remove.md b/apps/docs/public/api/members/remove.md index 218bdd2e0..383f72d8a 100644 --- a/apps/docs/public/api/members/remove.md +++ b/apps/docs/public/api/members/remove.md @@ -12,7 +12,7 @@ Метод для исключения пользователя из состава участников беседы или канала. -Если пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](DELETE /chats/{id}/leave). +Если пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](/api/members/leave). ## Параметры @@ -71,11 +71,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/members/update.md b/apps/docs/public/api/members/update.md index 615690567..d4042b0ce 100644 --- a/apps/docs/public/api/members/update.md +++ b/apps/docs/public/api/members/update.md @@ -64,11 +64,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -126,11 +126,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -156,11 +156,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/create.md b/apps/docs/public/api/messages/create.md index 0c9efcea1..c493ce3bf 100644 --- a/apps/docs/public/api/messages/create.md +++ b/apps/docs/public/api/messages/create.md @@ -28,22 +28,22 @@ - `entity_type: string` — Тип сущности Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности. Пример: `334` - - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` + - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `files: array of object` — Прикрепляемые файлы - - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` + - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](/api/files/direct-url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `"logo.png"` - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `size: integer, int32` (required) — Размер файла в байтах, отображаемый пользователю. Пример: `12345` - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800` - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600` - - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `5400` - - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `"4,8,12,20,16,10,6,3"` - - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"},{"text":"Отлично!","data":"awesome"}]]` - - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.. Пример: `194270` - - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"https://example.com/avatar.png"` - - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"Бот Поддержки"` - - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.. Пример: `false` + - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `5400` + - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `"4,8,12,20,16,10,6,3"` + - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"},{"text":"Отлично!","data":"awesome"}]]` + - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение. Пример: `194270` + - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"https://example.com/avatar.png"` + - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"Бот Поддержки"` + - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред. Пример: `false` - `link_preview: boolean` (default: false) — Отображение предпросмотра первой найденной ссылки в тексте сообщения. Пример: `false` ### Пример @@ -137,7 +137,7 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -149,29 +149,29 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` **Пример ответа:** @@ -240,11 +240,11 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -286,11 +286,11 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -332,11 +332,11 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/delete.md b/apps/docs/public/api/messages/delete.md index 7646df4da..a0dd3fa53 100644 --- a/apps/docs/public/api/messages/delete.md +++ b/apps/docs/public/api/messages/delete.md @@ -56,11 +56,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -102,11 +102,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/get.md b/apps/docs/public/api/messages/get.md index ca9a6b016..d6ae3be67 100644 --- a/apps/docs/public/api/messages/get.md +++ b/apps/docs/public/api/messages/get.md @@ -40,7 +40,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -52,29 +52,29 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` **Пример ответа:** @@ -159,11 +159,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -205,11 +205,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/list.md b/apps/docs/public/api/messages/list.md index 5dfb13fc0..82b1e24a3 100644 --- a/apps/docs/public/api/messages/list.md +++ b/apps/docs/public/api/messages/list.md @@ -45,7 +45,7 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -57,35 +57,35 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -162,11 +162,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -208,11 +208,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -254,11 +254,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -284,11 +284,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/pin.md b/apps/docs/public/api/messages/pin.md index 616eb035f..c7f2ddc3f 100644 --- a/apps/docs/public/api/messages/pin.md +++ b/apps/docs/public/api/messages/pin.md @@ -70,11 +70,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/194275/pin" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/unfurl.md b/apps/docs/public/api/messages/unfurl.md index 506baf61a..e301809a0 100644 --- a/apps/docs/public/api/messages/unfurl.md +++ b/apps/docs/public/api/messages/unfurl.md @@ -27,13 +27,13 @@ ### Схема -- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении. +- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении **Структура значений Record:** - `title: string` (required) — Заголовок. Пример: `"Статья: Отправка файлов"` - `description: string` (required) — Описание. Пример: `"Пример отправки файлов на удаленный сервер"` - `image_url: string` — Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image). Пример: `"https://website.com/img/landing.png"` - `image: object` — Изображение - - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](POST /direct_url). Пример: `"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}"` + - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](/api/files/direct-url). Пример: `"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}"` - `name: string` (required) — Название изображения (рекомендуется писать вместе с расширением). Пример: `"files-to-server.jpg"` - `size: integer, int32` — Размер изображения в байтах. Пример: `695604` @@ -88,11 +88,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -150,11 +150,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -180,11 +180,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/unpin.md b/apps/docs/public/api/messages/unpin.md index afc2a35bf..0ea28a1e6 100644 --- a/apps/docs/public/api/messages/unpin.md +++ b/apps/docs/public/api/messages/unpin.md @@ -70,11 +70,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/194275/pin" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/messages/update.md b/apps/docs/public/api/messages/update.md index d438f1910..a902e2deb 100644 --- a/apps/docs/public/api/messages/update.md +++ b/apps/docs/public/api/messages/update.md @@ -30,20 +30,20 @@ ### Схема - `message: object` (required) — Собранный объект параметров редактируемого сообщения - - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).. Пример: `"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет."` + - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). Пример: `"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет."` - `files: array of object` — Прикрепляемые файлы - - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` + - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](/api/files/direct-url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `"logo.png"` - `file_type: string` — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `size: integer, int32` — Размер файла в байтах, отображаемый пользователю. Пример: `12345` - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800` - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600` - - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `5400` - - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `"4,8,12,20,16,10,6,3"` - - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"}]]` - - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"https://example.com/avatar.png"` - - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"Бот Поддержки"` + - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `5400` + - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `"4,8,12,20,16,10,6,3"` + - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"}]]` + - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"https://example.com/avatar.png"` + - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"Бот Поддержки"` ### Пример @@ -124,7 +124,7 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -136,29 +136,29 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` **Пример ответа:** @@ -227,11 +227,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -273,11 +273,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -319,11 +319,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -349,11 +349,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/models.md b/apps/docs/public/api/models.md index dd0cf9c40..734998517 100644 --- a/apps/docs/public/api/models.md +++ b/apps/docs/public/api/models.md @@ -7,12 +7,12 @@ Все модели данных, возвращаемые в ответах API. Каждая модель содержит связанные методы и таблицу свойств. -> Методы [Получение подписи](POST /uploads) и [Загрузка файла](POST /direct_url) не возвращают модели данных. +> Методы [Получение подписи](/api/files/uploads) и [Загрузка файла](/api/files/direct-url) не возвращают модели данных. ## Дополнительное поле -- [Список дополнительных полей](GET /custom_properties) +- [Список дополнительных полей](/api/custom-properties/list) Дополнительное поле @@ -24,46 +24,46 @@ ## Токен доступа -- [Информация о токене](GET /oauth/token/info) +- [Информация о токене](/api/oauth/token-info) Токен доступа - `id: integer, int64` (required) — Идентификатор токена. Пример: `4827` - `token: string` (required) — Маскированный токен (видны первые 8 и последние 4 символа). Пример: `"cH5kR9mN...x7Qp"` -- `name: string` (required) — Пользовательское имя токена. Пример: `"Мой API токен"` +- `name: string` (required, nullable) — Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную. Пример: `"Мой API токен"` - `user_id: integer, int64` (required) — Идентификатор владельца токена. Пример: `12` - `scopes: array of string` (required) — Список скоупов токена. Пример: `["messages:read","chats:read"]` - `created_at: date-time` (required) — Дата создания токена. Пример: `"2025-01-15T10:30:00.000Z"` -- `revoked_at: date-time` (required) — Дата отзыва токена. Пример: `null` -- `expires_in: integer, int32` (required) — Время жизни токена в секундах. Пример: `null` -- `last_used_at: date-time` (required) — Дата последнего использования токена. Пример: `"2025-02-24T14:20:00.000Z"` +- `revoked_at: date-time` (required, nullable) — Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401. Пример: `null` +- `expires_in: integer, int32` (required, nullable) — Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно. Пример: `null` +- `last_used_at: date-time` (required, nullable) — Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать. Пример: `"2025-02-24T14:20:00.000Z"` ## Статус пользователя -- [Статус сотрудника](GET /users/{user_id}/status) -- [Свой статус](GET /profile/status) -- [Новый свой статус](PUT /profile/status) -- [Новый статус сотрудника](PUT /users/{user_id}/status) -- [Удаление своего статуса](DELETE /profile/status) -- [Удаление статуса сотрудника](DELETE /users/{user_id}/status) +- [Статус сотрудника](/api/users/get-status) +- [Свой статус](/api/profile/get-status) +- [Новый свой статус](/api/profile/update-status) +- [Новый статус сотрудника](/api/users/update-status) +- [Удаление своего статуса](/api/profile/delete-status) +- [Удаление статуса сотрудника](/api/users/remove-status) Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` -- `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` +- `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` -- `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. +- `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` ## Аватар -- [Загрузка своего аватара](PUT /profile/avatar) -- [Удаление своего аватара](DELETE /profile/avatar) -- [Загрузка аватара сотрудника](PUT /users/{user_id}/avatar) -- [Удаление аватара сотрудника](DELETE /users/{user_id}/avatar) +- [Загрузка своего аватара](/api/profile/update-avatar) +- [Удаление своего аватара](/api/profile/delete-avatar) +- [Загрузка аватара сотрудника](/api/users/update-avatar) +- [Удаление аватара сотрудника](/api/users/remove-avatar) Данные аватара @@ -72,63 +72,63 @@ ## Сотрудник -- [Новый сотрудник](POST /users) -- [Свой профиль](GET /profile) -- [Информация о сотруднике](GET /users/{id}) -- [Список сотрудников](GET /users) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список участников чата](GET /chats/{id}/members) -- [Поиск сотрудников](GET /search/users) -- [Редактирование сотрудника](PUT /users/{id}) -- [Удаление сотрудника](DELETE /users/{id}) +- [Новый сотрудник](/api/users/create) +- [Свой профиль](/api/profile/get) +- [Информация о сотруднике](/api/users/get) +- [Список сотрудников](/api/users/list) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список участников чата](/api/members/list) +- [Поиск сотрудников](/api/search/list-users) +- [Редактирование сотрудника](/api/users/update) +- [Удаление сотрудника](/api/users/delete) Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` -- `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` -- `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` +- `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` +- `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` -- `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` -- `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` -- `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` -- `title: string` (required) — Должность. Пример: `"CIO"` +- `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` +- `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` +- `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` +- `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено -- `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` +- `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` -- `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` +- `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` -- `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` -- `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` -- `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` +- `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` +- `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` +- `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` ## Тег -- [Новый тег](POST /group_tags) -- [Добавление тегов](POST /chats/{id}/group_tags) -- [Информация о теге](GET /group_tags/{id}) -- [Список тегов сотрудников](GET /group_tags) -- [Редактирование тега](PUT /group_tags/{id}) -- [Исключение тега](DELETE /chats/{id}/group_tags/{tag_id}) -- [Удаление тега](DELETE /group_tags/{id}) +- [Новый тег](/api/group-tags/create) +- [Добавление тегов](/api/members/add-group-tags) +- [Информация о теге](/api/group-tags/get) +- [Список тегов сотрудников](/api/group-tags/list) +- [Редактирование тега](/api/group-tags/update) +- [Исключение тега](/api/members/remove-group-tag) +- [Удаление тега](/api/group-tags/delete) Тег @@ -139,19 +139,19 @@ ## Чат -- [Новый чат](POST /chats) -- [Добавление пользователей](POST /chats/{id}/members) -- [Экспорт сообщений](POST /chats/exports) -- [Информация о чате](GET /chats/{id}) -- [Список чатов](GET /chats) -- [Поиск чатов](GET /search/chats) -- [Скачать архив экспорта](GET /chats/exports/{id}) -- [Редактирование чата](PUT /chats/{id}) -- [Архивация чата](PUT /chats/{id}/archive) -- [Разархивация чата](PUT /chats/{id}/unarchive) -- [Редактирование роли](PUT /chats/{id}/members/{user_id}) -- [Выход из беседы или канала](DELETE /chats/{id}/leave) -- [Исключение пользователя](DELETE /chats/{id}/members/{user_id}) +- [Новый чат](/api/chats/create) +- [Добавление пользователей](/api/members/add) +- [Экспорт сообщений](/api/chats/request-export) +- [Информация о чате](/api/chats/get) +- [Список чатов](/api/chats/list) +- [Поиск чатов](/api/search/list-chats) +- [Скачать архив экспорта](/api/chats/download-export) +- [Редактирование чата](/api/chats/update) +- [Архивация чата](/api/chats/archive) +- [Разархивация чата](/api/chats/unarchive) +- [Редактирование роли](/api/members/update) +- [Выход из беседы или канала](/api/members/leave) +- [Исключение пользователя](/api/members/remove) Чат @@ -170,32 +170,32 @@ ## Тред -- [Новый тред](POST /messages/{id}/thread) -- [Новый самостоятельный тред](POST /threads) -- [Информация о треде](GET /threads/{id}) -- [Список тредов](GET /threads) +- [Новый тред](/api/threads/add) +- [Новый самостоятельный тред](/api/threads/create) +- [Информация о треде](/api/threads/get) +- [Список тредов](/api/threads/list) Тред -- `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` -- `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` -- `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` -- `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` +- `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` +- `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` +- `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` +- `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` ## Сообщение -- [Новое сообщение](POST /messages) -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) -- [Информация о сообщении](GET /messages/{id}) -- [Список сообщений чата](GET /messages) -- [Поиск сообщений](GET /search/messages) -- [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) -- [Редактирование сообщения](PUT /messages/{id}) -- [Открепление сообщения](DELETE /messages/{id}/pin) -- [Удаление сообщения](DELETE /messages/{id}) +- [Новое сообщение](/api/messages/create) +- [Закрепление сообщения](/api/messages/pin) +- [Unfurl (разворачивание ссылок)](/api/messages/unfurl) +- [Информация о сообщении](/api/messages/get) +- [Список сообщений чата](/api/messages/list) +- [Поиск сообщений](/api/search/list-messages) +- [Список прочитавших сообщение](/api/read-member/list-readers) +- [Редактирование сообщения](/api/messages/update) +- [Открепление сообщения](/api/messages/unpin) +- [Удаление сообщения](/api/messages/delete) Сообщение @@ -204,7 +204,7 @@ Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` -- `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` +- `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -216,36 +216,36 @@ - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` -- `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок -- `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` +- `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. +- `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` -- `forwarding: object` (required) — Информация о пересланном сообщении +- `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` -- `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` -- `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` -- `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` -- `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` -- `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` +- `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` +- `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` +- `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` +- `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` +- `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` ## Реакция на сообщение -- [Добавление реакции](POST /messages/{id}/reactions) -- [Список реакций](GET /messages/{id}/reactions) -- [Удаление реакции](DELETE /messages/{id}/reactions) +- [Добавление реакции](/api/reactions/add) +- [Список реакций](/api/reactions/list) +- [Удаление реакции](/api/reactions/remove) Реакция на сообщение @@ -257,11 +257,11 @@ ## Напоминание -- [Новое напоминание](POST /tasks) -- [Информация о напоминании](GET /tasks/{id}) -- [Список напоминаний](GET /tasks) -- [Редактирование напоминания](PUT /tasks/{id}) -- [Удаление напоминания](DELETE /tasks/{id}) +- [Новое напоминание](/api/tasks/create) +- [Информация о напоминании](/api/tasks/get) +- [Список напоминаний](/api/tasks/list) +- [Редактирование напоминания](/api/tasks/update) +- [Удаление напоминания](/api/tasks/delete) Напоминание @@ -269,10 +269,10 @@ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` -- `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` +- `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` -- `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -283,23 +283,23 @@ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` ## Представление -- [Открытие представления](POST /views/open) +- [Открытие представления](/api/views/open) Представление - `type: string` (required) — Способ открытия представления. Пример: `"modal"` Значения: `modal` — Модальное окно - `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки). Пример: `"791a056b-006c-49dd-834b-c633fde52fe8"` -- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.. Пример: `"{"timeoff_id":4378}"` -- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.. Пример: `"timeoff_reguest_form"` +- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. Пример: `"{\"timeoff_id\":4378}"` +- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. Пример: `"timeoff_request_form"` - `view: object` (required) — Собранный объект представления - `title: string` (required, max length: 24) — Заголовок представления. Пример: `"Уведомление об отпуске"` - - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.. Пример: `"Закрыть"` + - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. Пример: `"Закрыть"` - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы. Пример: `"Отправить заявку"` - `blocks: array (union)` (required, max items: 100) — Массив блоков представления **Возможные типы элементов:** @@ -388,21 +388,21 @@ - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения - `label: string` (required, max length: 150) — Подпись к полю - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты. - - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле. + - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле - `required: boolean` (default: false) — Обязательность - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом ## Параметры бота -- [Новый бот](POST /bots) -- [Список ботов](GET /bots) -- [Информация о боте](GET /bots/{id}) -- [Редактирование бота](PUT /bots/{id}) -- [Удаление бота](DELETE /bots/{id}) -- [Саморегистрация вебхука бота](PUT /bot/webhook) -- [Ротация токена бота](POST /bots/{id}/recreate_token) -- [Ротация собственного токена бота](POST /bot/recreate_token) +- [Новый бот](/api/bots/create) +- [Список ботов](/api/bots/list) +- [Информация о боте](/api/bots/get) +- [Редактирование бота](/api/bots/update) +- [Удаление бота](/api/bots/delete) +- [Саморегистрация вебхука бота](/api/bots/update-webhook) +- [Ротация токена бота](/api/bots/recreate-token) +- [Ротация собственного токена бота](/api/bots/recreate-token-self) Параметры бота @@ -410,29 +410,29 @@ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости ## Событие исходящего вебхука -- [История событий](GET /webhooks/events) -- [Удаление события](DELETE /webhooks/events/{id}) +- [История событий](/api/bots/list-events) +- [Удаление события](/api/bots/remove-event) Событие исходящего вебхука @@ -455,8 +455,8 @@ - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `url: string` (required) — Прямая ссылка на сообщение. Пример: `"https://pachca.com/chats/1245817/messages/5678"` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012` - - `parent_message_id: integer, int32` — Идентификатор сообщения, к которому написан ответ. Пример: `3456` - - `thread: object` — Объект с параметрами треда + - `parent_message_id: integer, int32` (nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `3456` + - `thread: object` — Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение. - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -465,12 +465,12 @@ Значения: `reaction` — Для реакций всегда reaction - `event: string` (required) — Тип события Значения: `new` — Создание, `delete` — Удаление - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.. Пример: `9012` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`. Пример: `9012` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817` - `code: string` (required) — Emoji символ реакции. Пример: `"👍"` - `name: string` (required) — Название реакции. Пример: `"thumbsup"` - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345` - - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.. Пример: `"2025-05-15T14:30:00.000Z"` + - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - **ButtonWebhookPayload**: Структура исходящего вебхука о нажатии кнопки - `type: string` (required) — Тип объекта. Пример: `"button"` @@ -488,11 +488,11 @@ Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы - - `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` - - `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` + - `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` + - `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` - - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные + - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` @@ -502,7 +502,7 @@ - `event: string` (required) — Тип события Значения: `add` — Добавление, `remove` — Удаление - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012` - - `thread_id: integer, int32` — Идентификатор треда. Пример: `5678` + - `thread_id: integer, int32` (nullable) — Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. Пример: `5678` - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]` - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -541,24 +541,24 @@ - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438` - - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.. Пример: `"2025-05-15T14:30:00.000Z"` - - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.. Пример: `"2025-05-15T14:45:00.000Z"` - - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.. Пример: `900` + - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished. Пример: `"2025-05-15T14:30:00.000Z"` + - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished. Пример: `"2025-05-15T14:45:00.000Z"` + - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи. Пример: `900` - `members: array of object` — Список участников звонка. Присутствует для события finished. - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345` - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.. Пример: `"2025-05-15T14:45:00.000Z"` - - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready.. Пример: `4567` - - `file_id: integer, int32` — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.. Пример: `89012` - - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready.. Пример: `"https://api.pachca.com/files/89012"` - - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready.. Пример: `10485760` + - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка. Пример: `"2025-05-15T14:45:00.000Z"` + - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready. Пример: `4567` + - `file_id: integer, int32` (nullable) — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан. Пример: `89012` + - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready. Пример: `"https://api.pachca.com/files/89012"` + - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready. Пример: `10485760` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` ## Событие аудита -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) Событие аудита @@ -570,10 +570,10 @@ - `entity_type: string` (required) — Тип затронутой сущности. Пример: `"User"` - `actor_id: string` (required) — Идентификатор пользователя, выполнившего действие. Пример: `"98765"` - `actor_type: string` (required) — Тип актора. Пример: `"User"` -- `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект +- `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект. **Возможные варианты:** - - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted + - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted. - **AuditDetailsUserUpdated**: При: user_updated - `changed_attrs: array of string` (required) — Список изменённых полей - **AuditDetailsRoleChanged**: При: user_role_changed @@ -608,21 +608,21 @@ - `message_id: integer, int32` (required) — Идентификатор сообщения - `chat_id: integer, int32` (required) — Идентификатор чата - `user_id: integer, int32` (required) — Идентификатор пользователя - - `action_message: string` (required) — Описание действия. `null`, если у действия правила текст не задан. + - `action_message: string` (required, nullable) — Описание действия. `null`, если у действия правила текст не задан. - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали) - **AuditDetailsSearch**: При: search_users_api, search_chats_api, search_messages_api - `search_type: string` (required) — Тип поиска - `query_present: boolean` (required) — Указан ли поисковый запрос - `cursor_present: boolean` (required) — Использован ли курсор - `limit: integer, int32` (required) — Количество возвращённых результатов - - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages) + - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsBotScopes**: При: bot_scopes_updated - `added_scopes: array of string` (required) — Скоупы, добавленные токену бота - `removed_scopes: array of string` (required) — Скоупы, отозванные у токена бота - **AuditDetailsBotWebhookSettings**: При: bot_webhook_settings_updated - - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение) + - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsVideoCall**: При: video_call_started, video_call_finished diff --git a/apps/docs/public/api/oauth/token-info.md b/apps/docs/public/api/oauth/token-info.md index 721c6d421..8bfbb11b9 100644 --- a/apps/docs/public/api/oauth/token-info.md +++ b/apps/docs/public/api/oauth/token-info.md @@ -26,13 +26,13 @@ curl "https://api.pachca.com/api/shared/v1/oauth/token/info" \ - `data: object` (required) — Токен доступа - `id: integer, int64` (required) — Идентификатор токена. Пример: `4827` - `token: string` (required) — Маскированный токен (видны первые 8 и последние 4 символа). Пример: `"cH5kR9mN...x7Qp"` - - `name: string` (required) — Пользовательское имя токена. Пример: `"Мой API токен"` + - `name: string` (required, nullable) — Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную. Пример: `"Мой API токен"` - `user_id: integer, int64` (required) — Идентификатор владельца токена. Пример: `12` - `scopes: array of string` (required) — Список скоупов токена. Пример: `["messages:read","chats:read"]` - `created_at: date-time` (required) — Дата создания токена. Пример: `"2025-01-15T10:30:00.000Z"` - - `revoked_at: date-time` (required) — Дата отзыва токена. Пример: `null` - - `expires_in: integer, int32` (required) — Время жизни токена в секундах. Пример: `null` - - `last_used_at: date-time` (required) — Дата последнего использования токена. Пример: `"2025-02-24T14:20:00.000Z"` + - `revoked_at: date-time` (required, nullable) — Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401. Пример: `null` + - `expires_in: integer, int32` (required, nullable) — Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно. Пример: `null` + - `last_used_at: date-time` (required, nullable) — Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать. Пример: `"2025-02-24T14:20:00.000Z"` **Пример ответа:** diff --git a/apps/docs/public/api/overview.md b/apps/docs/public/api/overview.md index 0492fc925..85647293c 100644 --- a/apps/docs/public/api/overview.md +++ b/apps/docs/public/api/overview.md @@ -7,6 +7,8 @@ REST API Пачки позволяет автоматизировать работу в мессенджере: отправлять сообщения, управлять чатами и сотрудниками, создавать ботов и реагировать на события через вебхуки. +Если только начинаете, загляните в [руководства](/) с пошаговыми примерами. Можно обойтись и без написания кода: соберите интеграции из визуальных блоков в no-code инструменте [n8n](/guides/n8n/overview). + Базовый URL: `https://api.pachca.com/api/shared/v1` Клиенты и SDK: diff --git a/apps/docs/public/api/pagination.md b/apps/docs/public/api/pagination.md index 4d2b9152a..faf951b73 100644 --- a/apps/docs/public/api/pagination.md +++ b/apps/docs/public/api/pagination.md @@ -12,13 +12,13 @@ API Пачки использует **cursor-based** пагинацию для В API существует две группы методов, **возвращающих разную структуру `meta`** — алгоритмы обхода и условия конца данных у них отличаются. Перед интеграцией убедитесь, что вы знаете, к какой группе относится используемый метод. - [Списочные методы](#spisochnye-metody) — возвращают `meta.paginate` с четырьмя полями: `next_page`, `prev_page`, `has_next`, `has_prev`. -- [Методы поиска](#metody-poiska) — возвращают `meta` с полем `total` и `paginate.next_page` (только курсор «вперёд», без `prev_page`/`has_next`/`has_prev`). К этой группе по поведению также относится [Список сотрудников](GET /users) с заданным параметром `query` — `meta` возвращается в упрощённом формате. +- [Методы поиска](#metody-poiska) — возвращают `meta` с полем `total` и `paginate.next_page` (только курсор «вперёд», без `prev_page`/`has_next`/`has_prev`). К этой группе по поведению также относится [Список сотрудников](/api/users/list) с заданным параметром `query` — `meta` возвращается в упрощённом формате. ## Параметры запроса | Параметр | Тип | Описание | |----------|-----|----------| -| `limit` | integer | Количество записей на странице. Допустимые значения зависят от метода: большинство списочных методов — 1–50, [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) — до 300, [Поиск чатов](GET /search/chats) — до 100, [Поиск сотрудников](GET /search/users) и [Поиск сообщений](GET /search/messages) — до 200 | +| `limit` | integer | Количество записей на странице. Допустимые значения зависят от метода: большинство списочных методов — 1–50, [Список прочитавших сообщение](/api/read-member/list-readers) — до 300, [Поиск чатов](/api/search/list-chats) — до 100, [Поиск сотрудников](/api/search/list-users) и [Поиск сообщений](/api/search/list-messages) — до 200 | | `cursor` | string | Курсор для получения страницы (значение `meta.paginate.next_page` или `meta.paginate.prev_page` из предыдущего ответа) | ## Списочные методы @@ -29,9 +29,9 @@ API Пачки использует **cursor-based** пагинацию для - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` ```json title="Пример ответа списочного метода" @@ -55,14 +55,14 @@ API Пачки использует **cursor-based** пагинацию для | `has_next` | boolean | Есть ли ещё данные на следующей странице. На последней странице — `false`. | | `has_prev` | boolean | Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. | -К этой группе относятся: [Список сотрудников](GET /users) (без `query`), [Список чатов](GET /chats), [Список участников чата](GET /chats/{id}/members), [Список сообщений чата](GET /messages), [Список реакций](GET /messages/{id}/reactions), [Список прочитавших сообщение](GET /messages/{id}/read_member_ids), [Список тегов сотрудников](GET /group_tags), [Список сотрудников тега](GET /group_tags/{id}/users), [Список напоминаний](GET /tasks), [Журнал аудита событий](GET /audit_events), [История событий](GET /webhooks/events). +К этой группе относятся: [Список сотрудников](/api/users/list) (без `query`), [Список чатов](/api/chats/list), [Список участников чата](/api/members/list), [Список сообщений чата](/api/messages/list), [Список реакций](/api/reactions/list), [Список прочитавших сообщение](/api/read-member/list-readers), [Список тегов сотрудников](/api/group-tags/list), [Список сотрудников тега](/api/group-tags/list-users), [Список напоминаний](/api/tasks/list), [Журнал аудита событий](/api/security/list), [История событий](/api/bots/list-events). > В списочных методах поля `next_page`, `prev_page`, `has_next`, `has_prev` **всегда присутствуют** в ответе — даже когда `data` пустой. Курсоры никогда не бывают `null`. Признак конца данных — `has_next: false` (вперёд) или `has_prev: false` (назад), а не пустой `data`. Количество записей в `data` может быть меньше `limit` и на промежуточных страницах — не полагайтесь на длину массива. Курсор — непрозрачный токен: не парсите, не конструируйте вручную и не сохраняйте между сессиями. Всегда явно указывайте `limit` — не полагайтесь на значение по умолчанию. ### Сценарии и состояния `meta.paginate` -Поведение полей `meta.paginate` для типичных сценариев пагинации (на примере [Списка чатов](GET /chats) с DESC-сортировкой): +Поведение полей `meta.paginate` для типичных сценариев пагинации (на примере [Списка чатов](/api/chats/list) с DESC-сортировкой): | Сценарий | Запрос | `data` | `next_page` | `prev_page` | `has_next` | `has_prev` | |----------|--------|--------|-------------|-------------|-----------|-----------| @@ -107,10 +107,10 @@ API Пачки использует **cursor-based** пагинацию для К этой группе относятся: -- [Поиск сотрудников](GET /search/users) -- [Поиск чатов](GET /search/chats) -- [Поиск сообщений](GET /search/messages) -- [Список сотрудников](GET /users) **с заданным параметром `query`** — возвращает упрощённый `meta` без `prev_page`/`has_next`/`has_prev`. Если вызывать `/users` без `query`, ответ соответствует группе «Списочные методы» с полным `meta.paginate`. +- [Поиск сотрудников](/api/search/list-users) +- [Поиск чатов](/api/search/list-chats) +- [Поиск сообщений](/api/search/list-messages) +- [Список сотрудников](/api/users/list) **с заданным параметром `query`** — возвращает упрощённый `meta` без `prev_page`/`has_next`/`has_prev`. Если вызывать `/users` без `query`, ответ соответствует группе «Списочные методы» с полным `meta.paginate`. > В методах поиска **нет полей `prev_page`, `has_next`, `has_prev`** — поэтому polling новых результатов через `prev_page` здесь не работает. Конец данных определяйте по совпадению числа уже полученных записей с `total` или по пустому `data` в очередном ответе. Курсор `next_page` — непрозрачный токен, всегда указывайте `limit` явно. diff --git a/apps/docs/public/api/profile/delete-avatar.md b/apps/docs/public/api/profile/delete-avatar.md index adce83a92..573bdd3f3 100644 --- a/apps/docs/public/api/profile/delete-avatar.md +++ b/apps/docs/public/api/profile/delete-avatar.md @@ -45,11 +45,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/profile/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -78,11 +78,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/profile/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) diff --git a/apps/docs/public/api/profile/get-status.md b/apps/docs/public/api/profile/get-status.md index 415a1dd34..9e4d9b20d 100644 --- a/apps/docs/public/api/profile/get-status.md +++ b/apps/docs/public/api/profile/get-status.md @@ -12,6 +12,8 @@ Метод для получения информации о своем статусе. +Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. + ## Пример запроса ```bash @@ -28,9 +30,9 @@ curl "https://api.pachca.com/api/shared/v1/profile/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** diff --git a/apps/docs/public/api/profile/get.md b/apps/docs/public/api/profile/get.md index cfd93df24..1d3067890 100644 --- a/apps/docs/public/api/profile/get.md +++ b/apps/docs/public/api/profile/get.md @@ -27,39 +27,39 @@ curl "https://api.pachca.com/api/shared/v1/profile" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** diff --git a/apps/docs/public/api/profile/update-avatar.md b/apps/docs/public/api/profile/update-avatar.md index e87d0489e..b94080fcb 100644 --- a/apps/docs/public/api/profile/update-avatar.md +++ b/apps/docs/public/api/profile/update-avatar.md @@ -28,7 +28,7 @@ ```bash curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ - -F "image=@filename.png" + -F 'image=@filename.png' ``` ## Ответы @@ -72,11 +72,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -105,11 +105,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -138,11 +138,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/profile/update-status.md b/apps/docs/public/api/profile/update-status.md index d01444eba..411961a2d 100644 --- a/apps/docs/public/api/profile/update-status.md +++ b/apps/docs/public/api/profile/update-status.md @@ -25,7 +25,7 @@ - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` — Режим «Нет на месте». Пример: `true` - - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.. Пример: `"Вернусь после 15:00"` + - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. Пример: `"Вернусь после 15:00"` ### Пример @@ -67,9 +67,9 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** @@ -94,11 +94,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -156,11 +156,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/reactions/add.md b/apps/docs/public/api/reactions/add.md index a22b4e444..7c18bc98c 100644 --- a/apps/docs/public/api/reactions/add.md +++ b/apps/docs/public/api/reactions/add.md @@ -12,7 +12,7 @@ Метод для добавления реакции на сообщение. -Для добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](DELETE /messages/{id}/reactions). +Для добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](/api/reactions/remove). **Лимиты реакций:** @@ -87,11 +87,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/7231942/reactions" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -149,11 +149,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/7231942/reactions" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -179,11 +179,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/7231942/reactions" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/reactions/list.md b/apps/docs/public/api/reactions/list.md index f09b49ce7..5e05934b1 100644 --- a/apps/docs/public/api/reactions/list.md +++ b/apps/docs/public/api/reactions/list.md @@ -46,9 +46,9 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -79,11 +79,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -141,11 +141,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -171,11 +171,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/reactions/remove.md b/apps/docs/public/api/reactions/remove.md index 0a929f413..b8cf4449f 100644 --- a/apps/docs/public/api/reactions/remove.md +++ b/apps/docs/public/api/reactions/remove.md @@ -45,11 +45,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/7231942/reactions? - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -107,11 +107,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/7231942/reactions? - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -137,11 +137,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/7231942/reactions? - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/read-member/list-readers.md b/apps/docs/public/api/read-member/list-readers.md index 7d0d25202..05a4b895d 100644 --- a/apps/docs/public/api/read-member/list-readers.md +++ b/apps/docs/public/api/read-member/list-readers.md @@ -42,9 +42,9 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -70,11 +70,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -116,11 +116,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -162,11 +162,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -192,11 +192,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/search/list-chats.md b/apps/docs/public/api/search/list-chats.md index c2459ed43..4e0c98764 100644 --- a/apps/docs/public/api/search/list-chats.md +++ b/apps/docs/public/api/search/list-chats.md @@ -100,11 +100,11 @@ curl "https://api.pachca.com/api/shared/v1/search/chats?query=Разработк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -146,11 +146,11 @@ curl "https://api.pachca.com/api/shared/v1/search/chats?query=Разработк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/search/list-messages.md b/apps/docs/public/api/search/list-messages.md index 130189435..186d3adff 100644 --- a/apps/docs/public/api/search/list-messages.md +++ b/apps/docs/public/api/search/list-messages.md @@ -49,7 +49,7 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -61,29 +61,29 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` - `meta: object` (required) — Мета-информация для пагинации поисковых результатов - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42` - `paginate: object` (required) — Вспомогательная информация @@ -162,11 +162,11 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -208,11 +208,11 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/search/list-users.md b/apps/docs/public/api/search/list-users.md index b3f7f1853..b4497f132 100644 --- a/apps/docs/public/api/search/list-users.md +++ b/apps/docs/public/api/search/list-users.md @@ -44,39 +44,39 @@ curl "https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10& - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Мета-информация для пагинации поисковых результатов - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42` - `paginate: object` (required) — Вспомогательная информация @@ -144,11 +144,11 @@ curl "https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10& - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -190,11 +190,11 @@ curl "https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10& - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/security/list.md b/apps/docs/public/api/security/list.md index f487ba9ef..4bebf237b 100644 --- a/apps/docs/public/api/security/list.md +++ b/apps/docs/public/api/security/list.md @@ -19,7 +19,7 @@ ### Query параметры - `start_time: date-time` — Начальная метка времени (включительно) -- `end_time: date-time` — Конечная метка времени (исключительно) +- `end_time: date-time` — Конечная метка времени (включительно) - `event_key: string` — Фильтр по конкретному типу события Значения: `user_login`, `user_logout`, `user_2fa_fail`, `user_2fa_success`, `user_created`, `user_deleted`, `user_role_changed`, `user_updated`, `tag_created`, `tag_deleted`, `user_added_to_tag`, `user_removed_from_tag`, `chat_created`, `chat_renamed`, `chat_permission_changed`, `user_chat_join`, `user_chat_leave`, `tag_added_to_chat`, `tag_removed_from_chat`, `message_updated`, `message_deleted`, `message_created`, `reaction_created`, `reaction_deleted`, `thread_created`, `access_token_created`, `access_token_updated`, `access_token_destroy`, `kms_encrypt`, `kms_decrypt`, `audit_events_accessed`, `dlp_violation_detected`, `search_users_api`, `search_chats_api`, `search_messages_api`, `bot_scopes_updated`, `bot_webhook_settings_updated`, `bot_token_recreated`, `bot_deleted`, `video_call_started`, `video_call_finished`, `video_call_recording_ready` - `actor_id: string` — Идентификатор пользователя, выполнившего действие @@ -34,7 +34,7 @@ ```bash # Для получения следующей страницы используйте cursor из meta.paginate.next_page -curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09:11:00Z&end_time=2025-05-02T09:11:00Z&event_key=user_login&actor_id=98765&actor_type=User&entity_id=98765&entity_type=User&limit=1" \ +curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09:11:00.000Z&end_time=2025-05-02T09:11:00.000Z&event_key=user_login&actor_id=98765&actor_type=User&entity_id=98765&entity_type=User&limit=1" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` @@ -53,10 +53,10 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `entity_type: string` (required) — Тип затронутой сущности. Пример: `"User"` - `actor_id: string` (required) — Идентификатор пользователя, выполнившего действие. Пример: `"98765"` - `actor_type: string` (required) — Тип актора. Пример: `"User"` - - `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект + - `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект. **Возможные варианты:** - - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted + - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted. - **AuditDetailsUserUpdated**: При: user_updated - `changed_attrs: array of string` (required) — Список изменённых полей - **AuditDetailsRoleChanged**: При: user_role_changed @@ -91,21 +91,21 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `message_id: integer, int32` (required) — Идентификатор сообщения - `chat_id: integer, int32` (required) — Идентификатор чата - `user_id: integer, int32` (required) — Идентификатор пользователя - - `action_message: string` (required) — Описание действия. `null`, если у действия правила текст не задан. + - `action_message: string` (required, nullable) — Описание действия. `null`, если у действия правила текст не задан. - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали) - **AuditDetailsSearch**: При: search_users_api, search_chats_api, search_messages_api - `search_type: string` (required) — Тип поиска - `query_present: boolean` (required) — Указан ли поисковый запрос - `cursor_present: boolean` (required) — Использован ли курсор - `limit: integer, int32` (required) — Количество возвращённых результатов - - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages) + - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsBotScopes**: При: bot_scopes_updated - `added_scopes: array of string` (required) — Скоупы, добавленные токену бота - `removed_scopes: array of string` (required) — Скоупы, отозванные у токена бота - **AuditDetailsBotWebhookSettings**: При: bot_webhook_settings_updated - - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение) + - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsVideoCall**: При: video_call_started, video_call_finished @@ -121,9 +121,9 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -160,11 +160,11 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -206,11 +206,11 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -252,11 +252,11 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/tasks/create.md b/apps/docs/public/api/tasks/create.md index cc15abbac..5f18a4325 100644 --- a/apps/docs/public/api/tasks/create.md +++ b/apps/docs/public/api/tasks/create.md @@ -16,7 +16,7 @@ У напоминания должны быть ответственные, если их не указывать - ответственным назначается вы. -Ответственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](GET /users). +Ответственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](/api/users/list). Напоминание можно привязать к чату, указав `chat_id`. Для привязки к чату необходимо быть его участником. @@ -32,8 +32,8 @@ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` — Описание (по умолчанию — название типа). Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).. Пример: `"2020-06-05T12:00:00.000+03:00"` - - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно).. Пример: `2` + - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени). Пример: `"2020-06-05T12:00:00.000+03:00"` + - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно). Пример: `2` - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы). Пример: `[12,13]` - `chat_id: integer, int32` — Идентификатор чата, к которому привязывается напоминание. Пример: `456` - `all_day: boolean` — Напоминание на весь день (без указания времени). Пример: `false` @@ -105,10 +105,10 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -119,7 +119,7 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` **Пример ответа:** @@ -157,11 +157,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -203,11 +203,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -249,11 +249,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -279,11 +279,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/tasks/delete.md b/apps/docs/public/api/tasks/delete.md index 2e1a9f08c..9892389db 100644 --- a/apps/docs/public/api/tasks/delete.md +++ b/apps/docs/public/api/tasks/delete.md @@ -54,11 +54,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -100,11 +100,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/tasks/get.md b/apps/docs/public/api/tasks/get.md index 7c7ca4a1e..cb526fc92 100644 --- a/apps/docs/public/api/tasks/get.md +++ b/apps/docs/public/api/tasks/get.md @@ -39,10 +39,10 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -53,7 +53,7 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` **Пример ответа:** @@ -107,11 +107,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -153,11 +153,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/tasks/list.md b/apps/docs/public/api/tasks/list.md index 3e2e07118..1ac2a5a1d 100644 --- a/apps/docs/public/api/tasks/list.md +++ b/apps/docs/public/api/tasks/list.md @@ -39,10 +39,10 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -53,13 +53,13 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -107,11 +107,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -153,11 +153,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/tasks/update.md b/apps/docs/public/api/tasks/update.md index ad9c7059b..1da0018a6 100644 --- a/apps/docs/public/api/tasks/update.md +++ b/apps/docs/public/api/tasks/update.md @@ -33,8 +33,8 @@ - `kind: string` — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).. Пример: `"2020-06-05T12:00:00.000+03:00"` - - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно).. Пример: `2` + - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени). Пример: `"2020-06-05T12:00:00.000+03:00"` + - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно). Пример: `2` - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные». Пример: `[12]` - `status: string` — Статус Значения: `done` — Выполнено, `undone` — Активно @@ -106,10 +106,10 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -120,7 +120,7 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` **Пример ответа:** @@ -158,11 +158,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -204,11 +204,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -250,11 +250,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -280,11 +280,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/threads/add.md b/apps/docs/public/api/threads/add.md index d8e48c700..3c2075ee1 100644 --- a/apps/docs/public/api/threads/add.md +++ b/apps/docs/public/api/threads/add.md @@ -35,10 +35,10 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \ **Схема ответа:** - `data: object` (required) — Тред - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` **Пример ответа:** @@ -93,11 +93,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/threads/create.md b/apps/docs/public/api/threads/create.md index 171b2926a..d53d89601 100644 --- a/apps/docs/public/api/threads/create.md +++ b/apps/docs/public/api/threads/create.md @@ -28,10 +28,10 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ **Схема ответа:** - `data: object` (required) — Тред - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` **Пример ответа:** @@ -41,8 +41,8 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ "data": { "id": 265142, "chat_id": 2637266155, - "message_id": 154332686, - "message_chat_id": 2637266154, + "message_id": null, + "message_chat_id": null, "updated_at": "2023-02-01T19:20:47.204Z" } } @@ -70,11 +70,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/threads/get.md b/apps/docs/public/api/threads/get.md index f5a137b6c..9a018977c 100644 --- a/apps/docs/public/api/threads/get.md +++ b/apps/docs/public/api/threads/get.md @@ -35,10 +35,10 @@ curl "https://api.pachca.com/api/shared/v1/threads/265142" \ **Схема ответа:** - `data: object` (required) — Тред - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` **Пример ответа:** @@ -77,11 +77,11 @@ curl "https://api.pachca.com/api/shared/v1/threads/265142" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -123,11 +123,11 @@ curl "https://api.pachca.com/api/shared/v1/threads/265142" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/threads/list.md b/apps/docs/public/api/threads/list.md index 5a54c8256..4c8e689e8 100644 --- a/apps/docs/public/api/threads/list.md +++ b/apps/docs/public/api/threads/list.md @@ -41,17 +41,17 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 **Схема ответа:** - `data: array of object` (required) - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -83,11 +83,11 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -129,11 +129,11 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -175,11 +175,11 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/create.md b/apps/docs/public/api/users/create.md index a1eef50be..2d864a07f 100644 --- a/apps/docs/public/api/users/create.md +++ b/apps/docs/public/api/users/create.md @@ -12,7 +12,7 @@ Метод для создания нового сотрудника в вашей компании. -Вы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties). +Вы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](/api/custom-properties/list). Через параметр `chat_ids` сотрудника можно сразу добавить в указанные чаты. Чтобы создать гостя, передайте `role: "guest"` — для этой роли `chat_ids` обязателен и должен содержать ровно один активный чат, в который у токена есть право добавлять участников. При нарушении правил гостевого доступа возвращается `400` с ошибкой по полю `chat_ids`. @@ -36,11 +36,11 @@ Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (default: false) — Деактивация пользователя. Пример: `false` - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику. Пример: `["Product","Design"]` - - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.. Пример: `[12345]` + - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат. Пример: `[12345]` - `custom_properties: array of object` — Задаваемые дополнительные поля - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `value: string` (required, max length: 768) — Устанавливаемое значение. Пример: `"Санкт-Петербург"` -- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.. Пример: `false` +- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO. Пример: `false` ### Пример @@ -113,39 +113,39 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** @@ -201,11 +201,11 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -247,11 +247,11 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -293,11 +293,11 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/delete.md b/apps/docs/public/api/users/delete.md index 2df5d9e89..383bfe16d 100644 --- a/apps/docs/public/api/users/delete.md +++ b/apps/docs/public/api/users/delete.md @@ -54,11 +54,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -100,11 +100,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/get-status.md b/apps/docs/public/api/users/get-status.md index 4db4c8b69..ba89c4dd0 100644 --- a/apps/docs/public/api/users/get-status.md +++ b/apps/docs/public/api/users/get-status.md @@ -12,6 +12,8 @@ Метод для получения информации о статусе сотрудника. +Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. + ## Параметры ### Path параметры @@ -35,9 +37,9 @@ curl "https://api.pachca.com/api/shared/v1/users/12/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** @@ -94,11 +96,11 @@ curl "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/get.md b/apps/docs/public/api/users/get.md index 0b67552d9..63c4e204d 100644 --- a/apps/docs/public/api/users/get.md +++ b/apps/docs/public/api/users/get.md @@ -36,39 +36,39 @@ curl "https://api.pachca.com/api/shared/v1/users/12" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** @@ -140,11 +140,11 @@ curl "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -186,11 +186,11 @@ curl "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/list.md b/apps/docs/public/api/users/list.md index d5a9f9d46..e09ef3ff3 100644 --- a/apps/docs/public/api/users/list.md +++ b/apps/docs/public/api/users/list.md @@ -37,45 +37,45 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -141,11 +141,11 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -187,11 +187,11 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -233,11 +233,11 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/remove-avatar.md b/apps/docs/public/api/users/remove-avatar.md index 921e93ad1..ddb98df08 100644 --- a/apps/docs/public/api/users/remove-avatar.md +++ b/apps/docs/public/api/users/remove-avatar.md @@ -52,11 +52,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -85,11 +85,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -118,11 +118,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/remove-status.md b/apps/docs/public/api/users/remove-status.md index 6fcf77315..ff609b01a 100644 --- a/apps/docs/public/api/users/remove-status.md +++ b/apps/docs/public/api/users/remove-status.md @@ -68,11 +68,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/update-avatar.md b/apps/docs/public/api/users/update-avatar.md index 7a2b478ae..4dc1fc3bf 100644 --- a/apps/docs/public/api/users/update-avatar.md +++ b/apps/docs/public/api/users/update-avatar.md @@ -35,7 +35,7 @@ ```bash curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ - -F "image=@filename.png" + -F 'image=@filename.png' ``` ## Ответы @@ -79,11 +79,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -112,11 +112,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -145,11 +145,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -175,11 +175,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/update-status.md b/apps/docs/public/api/users/update-status.md index 3344e7305..280d7bc92 100644 --- a/apps/docs/public/api/users/update-status.md +++ b/apps/docs/public/api/users/update-status.md @@ -32,7 +32,7 @@ - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` — Режим «Нет на месте». Пример: `true` - - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.. Пример: `"Вернусь после 15:00"` + - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. Пример: `"Вернусь после 15:00"` ### Пример @@ -74,9 +74,9 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** @@ -101,11 +101,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -163,11 +163,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -193,11 +193,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/users/update.md b/apps/docs/public/api/users/update.md index abc517be9..8c14e42bf 100644 --- a/apps/docs/public/api/users/update.md +++ b/apps/docs/public/api/users/update.md @@ -12,7 +12,7 @@ Метод для редактирования сотрудника. -Для редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties). +Для редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](/api/custom-properties/list). ## Параметры @@ -108,39 +108,39 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** @@ -196,11 +196,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -242,11 +242,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -288,11 +288,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -318,11 +318,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/api/views/open.md b/apps/docs/public/api/views/open.md index 035901a07..63458063b 100644 --- a/apps/docs/public/api/views/open.md +++ b/apps/docs/public/api/views/open.md @@ -25,11 +25,11 @@ - `type: string` (required) — Способ открытия представления. Пример: `"modal"` Значения: `modal` — Модальное окно - `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки). Пример: `"791a056b-006c-49dd-834b-c633fde52fe8"` -- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.. Пример: `"{"timeoff_id":4378}"` -- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.. Пример: `"timeoff_reguest_form"` +- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. Пример: `"{\"timeoff_id\":4378}"` +- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. Пример: `"timeoff_request_form"` - `view: object` (required) — Собранный объект представления - `title: string` (required, max length: 24) — Заголовок представления. Пример: `"Уведомление об отпуске"` - - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.. Пример: `"Закрыть"` + - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. Пример: `"Закрыть"` - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы. Пример: `"Отправить заявку"` - `blocks: array (union)` (required, max items: 100) — Массив блоков представления **Возможные типы элементов:** @@ -118,7 +118,7 @@ - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения - `label: string` (required, max length: 150) — Подпись к полю - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты. - - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле. + - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле - `required: boolean` (default: false) — Обязательность - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом @@ -129,7 +129,7 @@ "type": "modal", "trigger_id": "791a056b-006c-49dd-834b-c633fde52fe8", "private_metadata": "{\"timeoff_id\":4378}", - "callback_id": "timeoff_reguest_form", + "callback_id": "timeoff_request_form", "view": { "title": "Уведомление об отпуске", "close_text": "Закрыть", @@ -247,7 +247,7 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ "type": "modal", "trigger_id": "791a056b-006c-49dd-834b-c633fde52fe8", "private_metadata": "{\"timeoff_id\":4378}", - "callback_id": "timeoff_reguest_form", + "callback_id": "timeoff_request_form", "view": { "title": "Уведомление об отпуске", "close_text": "Закрыть", @@ -365,11 +365,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -411,11 +411,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -457,11 +457,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -487,11 +487,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/guides/ai-agents/interaction.md b/apps/docs/public/guides/ai-agents/interaction.md index ff3dd8add..d3f95ddb3 100644 --- a/apps/docs/public/guides/ai-agents/interaction.md +++ b/apps/docs/public/guides/ai-agents/interaction.md @@ -19,28 +19,28 @@ Агент читает историю сообщений и информацию о чате, чтобы понять контекст запроса. Если бота вызвали в треде и других сообщений нет — основной контекст в родительском сообщении. У самостоятельного треда родительского сообщения нет (`message_id` возвращается как `null`) — контекст только в сообщениях самого треда. -- [Список сообщений чата](GET /messages) — история сообщений треда или чата -- [Информация о сообщении](GET /messages/{id}) — родительское сообщение треда -- [Информация о чате](GET /chats/{id}) — участники и тема чата +- [Список сообщений чата](/api/messages/list) — история сообщений треда или чата +- [Информация о сообщении](/api/messages/get) — родительское сообщение треда +- [Информация о чате](/api/chats/get) — участники и тема чата ### Шаг 3. Выполнение действий Агент выполняет нужные действия — отправляет сообщения, создаёт задачи, вызывает внешние сервисы. Реакция-индикатор показывает пользователю, что агент работает. -- [Новое сообщение](POST /messages) — отправить сообщение в канал или беседу -- [Новый тред](POST /messages/{id}/thread) — создать тред у сообщения и ответить -- [Новый самостоятельный тред](POST /threads) — создать тред для диалога без привязки к сообщению -- [Новое напоминание](POST /tasks) — создать задачу из контекста разговора -- [Новая реакция](POST /messages/{id}/reactions) — поставить реакцию-индикатор +- [Новое сообщение](/api/messages/create) — отправить сообщение в канал или беседу +- [Новый тред](/api/threads/add) — создать тред у сообщения и ответить +- [Новый самостоятельный тред](/api/threads/create) — создать тред для диалога без привязки к сообщению +- [Новое напоминание](/api/tasks/create) — создать задачу из контекста разговора +- [Новая реакция](/api/reactions/add) — поставить реакцию-индикатор ### Шаг 4. Ответ Результат агент отправляет обратно в тред или в личные сообщения и снимает реакцию-индикатор. -- [Новое сообщение](POST /messages) — отправить результат -- [Удаление реакции](DELETE /messages/{id}/reactions) — снять реакцию-индикатор +- [Новое сообщение](/api/messages/create) — отправить результат +- [Удаление реакции](/api/reactions/remove) — снять реакцию-индикатор Полный формат событий и payload — в [гайде по исходящим вебхукам](/guides/webhook/overview). @@ -54,7 +54,7 @@ ## Реакция agent-thinking -Создайте [кастомную реакцию](https://pachca.com/help-center/features/kastomnye-reakcii) с именем `agent-thinking` и загрузите анимированную иконку. Когда агент ставит эту реакцию на сообщение, интерфейс Пачки автоматически показывает живой таймер вместо счётчика — пользователь видит, сколько секунд агент уже работает. Таймер отображается до 5 минут. При [добавлении реакции](POST /messages/{id}/reactions) передайте параметр `name` со значением `agent-thinking`. +Создайте [кастомную реакцию](https://pachca.com/help-center/features/kastomnye-reakcii) с именем `agent-thinking` и загрузите анимированную иконку. Когда агент ставит эту реакцию на сообщение, интерфейс Пачки автоматически показывает живой таймер вместо счётчика — пользователь видит, сколько секунд агент уже работает. Таймер отображается до 5 минут. При [добавлении реакции](/api/reactions/add) передайте параметр `name` со значением `agent-thinking`. ![Реакция agent-thinking с таймером](/images/agent-thinking.gif) diff --git a/apps/docs/public/guides/ai-agents/markdown.md b/apps/docs/public/guides/ai-agents/markdown.md index 3c7043511..4cdeab4aa 100644 --- a/apps/docs/public/guides/ai-agents/markdown.md +++ b/apps/docs/public/guides/ai-agents/markdown.md @@ -11,7 +11,7 @@ Текст сообщений — Markdown. Жирный, курсив, зачёркивание, ссылки, упоминания, инлайн-код и блоки кода работают сразу — агенту достаточно прислать обычный Markdown в тексте сообщения. Списки, цитаты и заголовки в тексте сообщения не распознаются и остаются обычным текстом, для них прикрепляйте `.md`-файл (см. ниже). Полный список поддерживаемых конструкций — в разделе [Форматирование текста](/guides/markdown). -Разметка передаётся в поле `content` метода [Новое сообщение](POST /messages) как есть — отдельный флаг включать не нужно, текст всегда интерпретируется как Markdown. Те же правила действуют при [редактировании сообщения](PUT /messages/{id}). +Разметка передаётся в поле `content` метода [Новое сообщение](/api/messages/create) как есть — отдельный флаг включать не нужно, текст всегда интерпретируется как Markdown. Те же правила действуют при [редактировании сообщения](/api/messages/update). ![Сообщение с Markdown и приложенным .md-файлом](/images/markdown-message.webp) @@ -30,7 +30,7 @@ Всё, что присылает бот, рендерится так же, как контент от людей. Специального режима для агентов не требуется. -Загрузите `.md` по схеме [Загрузка файлов](/api/file-uploads) (три шага через presigned S3), затем передайте полученный ключ файла в поле `files` при вызове [Новое сообщение](POST /messages). Расширение `.md` в имени файла включает рендер карточкой автоматически. +Загрузите `.md` по схеме [Загрузка файлов](/api/file-uploads) (три шага через presigned S3), затем передайте полученный ключ файла в поле `files` при вызове [Новое сообщение](/api/messages/create). Расширение `.md` в имени файла включает рендер карточкой автоматически. ![Файл .md, отрендеренный карточкой в Пачке](/images/markdown-render.webp) diff --git a/apps/docs/public/guides/audit-events.md b/apps/docs/public/guides/audit-events.md index cde5b95c0..9d5f11ad2 100644 --- a/apps/docs/public/guides/audit-events.md +++ b/apps/docs/public/guides/audit-events.md @@ -9,7 +9,7 @@ `Audit events API` Пачки предоставляет командам безопасности доступ к логам о критически важных событиях в мессенджере. Это позволяет обеспечивать надежный мониторинг и соответствовать требованиям информационной безопасности и регуляторов. -Для получения логов событий на основе указанных фильтров используйте метод [Журнал аудита событий](GET /audit_events). +Для получения логов событий на основе указанных фильтров используйте метод [Журнал аудита событий](/api/security/list). ## Реализованные типы событий diff --git a/apps/docs/public/guides/bots/access.md b/apps/docs/public/guides/bots/access.md index ff6db794b..6b14a6ebd 100644 --- a/apps/docs/public/guides/bots/access.md +++ b/apps/docs/public/guides/bots/access.md @@ -13,14 +13,14 @@ Добавить бота в чат можно двумя способами: - Через интерфейс — в диалоге **Добавление участников** на вкладке **Интеграции**. Список доступных ботов зависит от настройки [Кто может добавлять бота в чаты](/guides/bots/setup#kto-mozhet-dobavlyat-bota-v-chaty). -- Через API — метод [Добавление участника в чат](POST /chats/{id}/members), передав `user_id` бота в `member_ids`. +- Через API — метод [Добавление участника в чат](/api/members/add), передав `user_id` бота в `member_ids`. ## Треды Бота можно добавить напрямую в тред — без добавления в родительский чат. Это возможно благодаря [сквозным тредам](/guides/threads#skvoznye-tredy) Пачки: участник треда видит только сам тред и родительское сообщение, но не историю чата. Добавить бота в тред можно двумя способами: -- Через API — метод [Добавление участника в чат](POST /chats/{id}/members), передав `chat_id` треда. +- Через API — метод [Добавление участника в чат](/api/members/add), передав `chat_id` треда. - Через упоминание `@никнейм_бота` в сообщении — доступно, когда бот настроен как **публичный**. ## Личные сообщения @@ -28,7 +28,7 @@ Пользователь может писать боту личные сообщения и взаимодействовать с ним 1 на 1 в двух случаях: - Бот настроен как **публичный** — любой участник пространства может начать диалог. -- Бот сам ранее [отправил сообщение](POST /messages) пользователю через API (с `entity_type: "user"`) — после этого пользователь может отвечать, даже если бот не публичный. +- Бот сам ранее [отправил сообщение](/api/messages/create) пользователю через API (с `entity_type: "user"`) — после этого пользователь может отвечать, даже если бот не публичный. При этом бота нельзя добавить в существующие личные сообщения между двумя участниками пространства. @@ -50,7 +50,7 @@ Поиск из общей строки поиска и при создании личных сообщений ведёт себя по-разному в зависимости от роли: - **Сотрудники и администраторы** — видят и обычных пользователей, и публичных ботов в пространстве. -- **Гости и мульти-гости** — видят **только тех, с кем уже есть личные сообщения**. Бот появится в выдаче только если с ним уже была переписка — например, потому что бот сам ранее [отправил сообщение](POST /messages) пользователю. +- **Гости и мульти-гости** — видят **только тех, с кем уже есть личные сообщения**. Бот появится в выдаче только если с ним уже была переписка — например, потому что бот сам ранее [отправил сообщение](/api/messages/create) пользователю. ### Список добавления участников в чат diff --git a/apps/docs/public/guides/bots/overview.md b/apps/docs/public/guides/bots/overview.md index 1ea7bc830..f530a1882 100644 --- a/apps/docs/public/guides/bots/overview.md +++ b/apps/docs/public/guides/bots/overview.md @@ -46,11 +46,11 @@ *Сообщение от бота с подменой имени и аватара* -Метод [Новое сообщение](POST /messages) поддерживает поля `display_name` и `display_avatar_url`, позволяющие указать произвольное имя и аватар отправителя для конкретного сообщения. Бейдж **Бот** при этом сохраняется, а при открытии профиля отправителя пользователь увидит оригинальное имя и аватар бота. +Метод [Новое сообщение](/api/messages/create) поддерживает поля `display_name` и `display_avatar_url`, позволяющие указать произвольное имя и аватар отправителя для конкретного сообщения. Бейдж **Бот** при этом сохраняется, а при открытии профиля отправителя пользователь увидит оригинальное имя и аватар бота. Это полезно для миграции сообщений из другого сервиса: бот отправляет сообщения от своего имени, но каждое сообщение отображается с именем и аватаром реального автора из исходной системы. -> Поля `display_name` и `display_avatar_url` доступны только при использовании токена бота. Метод [Редактирование сообщения](PUT /messages/{id}) также поддерживает эти поля. +> Поля `display_name` и `display_avatar_url` доступны только при использовании токена бота. Метод [Редактирование сообщения](/api/messages/update) также поддерживает эти поля. diff --git a/apps/docs/public/guides/bots/setup.md b/apps/docs/public/guides/bots/setup.md index cba051aa0..3ca64b845 100644 --- a/apps/docs/public/guides/bots/setup.md +++ b/apps/docs/public/guides/bots/setup.md @@ -8,7 +8,7 @@ Бота можно создать двумя способами: - **Через интерфейс** — отдельные настройки (тип бота, аватар) и наглядная пошаговая форма. Подходит для разовой ручной настройки. -- **Через API** ([Новый бот](POST /bots)) — программно, без интерфейса. Подходит для автоматизации: завести бота из своего сервиса или скрипта и сразу получить `access_token`. +- **Через API** ([Новый бот](/api/bots/create)) — программно, без интерфейса. Подходит для автоматизации: завести бота из своего сервиса или скрипта и сразу получить `access_token`. ## Создание бота через интерфейс @@ -36,7 +36,7 @@ ### Шаг 2. Скопируйте токен -После создания бота перейдите на вкладку **API** и скопируйте `access_token` — он потребуется для работы с API от имени бота. Токен не имеет срока жизни. Там же доступен `user_id` бота — используется, например, для [добавления бота в чат](POST /chats/{id}/members). +После создания бота перейдите на вкладку **API** и скопируйте `access_token` — он потребуется для работы с API от имени бота. Токен не имеет срока жизни. Там же доступен `user_id` бота — используется, например, для [добавления бота в чат](/api/members/add). ### Шаг 3. Измените название и аватар (опционально) @@ -51,7 +51,7 @@ ## Создание бота через API -Бота можно создать программно методом [Новый бот](POST /bots) — без интерфейса. Это удобно, когда нужно завести бота из своего сервиса или скрипта. +Бота можно создать программно методом [Новый бот](/api/bots/create) — без интерфейса. Это удобно, когда нужно завести бота из своего сервиса или скрипта. ### Шаг 1. Отправьте запрос на создание @@ -66,13 +66,13 @@ В ответе вы получите `access_token` бота — сразу сохраните его. Повторно получить токен вы сможете только через интерфейс (вкладка **API** настроек бота), там же его можно перевыпустить. Вместе с токеном придёт `id` бота (его `user_id`). -Получить параметры существующего бота можно методом [Информация о боте](GET /bots/{id}), а изменить — методом [Редактирование бота](PUT /bots/{id}). Бот может и сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](PUT /bot/webhook), без участия администратора. +Получить параметры существующего бота можно методом [Информация о боте](/api/bots/get), а изменить — методом [Редактирование бота](/api/bots/update). Бот может и сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](/api/bots/update-webhook), без участия администратора. ## Профиль бота Бот, как и любой участник пространства, имеет свой профиль. В нём отображаются имя, аватар, никнейм, статус и список общих чатов с ботом. Профиль бота можно редактировать — изменить имя, никнейм и другие поля. -**Никнейм** — уникальный идентификатор бота для упоминания через `@`. Именно по никнейму сотрудники могут упоминать бота в сообщениях и добавлять его в [сквозные треды](/guides/bots/access#tredy). Никнейм и другие поля профиля можно изменить через интерфейс или через API — метод [Редактирование сотрудника](PUT /users/{id}). +**Никнейм** — уникальный идентификатор бота для упоминания через `@`. Именно по никнейму сотрудники могут упоминать бота в сообщениях и добавлять его в [сквозные треды](/guides/bots/access#tredy). Никнейм и другие поля профиля можно изменить через интерфейс или через API — метод [Редактирование сотрудника](/api/users/update). ## Настройка доступов @@ -102,7 +102,7 @@ ### Настройка через API -Эти доступы можно задать не только в интерфейсе, но и через API — методом [Редактирование бота](PUT /bots/{id}) или сразу при создании: +Эти доступы можно задать не только в интерфейсе, но и через API — методом [Редактирование бота](/api/bots/update) или сразу при создании: - **Кто может редактировать настройки бота** — поле `can_edit` (роли `admin` и `chat_owners`). Создатель имеет доступ всегда, поэтому в поле перечисляются только дополнительные роли, а пустой массив означает «только создатель» - **Кто может добавлять бота в чаты** — поле `who_can_add` (`creator`, `creator_admin`, `creator_admin_user`, `anyone`) diff --git a/apps/docs/public/guides/buttons.md b/apps/docs/public/guides/buttons.md index 99ce5843c..9dd92600d 100644 --- a/apps/docs/public/guides/buttons.md +++ b/apps/docs/public/guides/buttons.md @@ -17,7 +17,7 @@ ### Шаг 2. Отправьте сообщение с кнопками -Используйте метод [Новое сообщение](POST /messages) с полем `buttons` — массив строк, каждая из которых содержит массив кнопок. +Используйте метод [Новое сообщение](/api/messages/create) с полем `buttons` — массив строк, каждая из которых содержит массив кнопок. ### Шаг 3. Настройте исходящий вебхук @@ -66,7 +66,7 @@ Data-кнопка отправляет данные на сервер через ## Отправка кнопок -Для отправки используйте метод [Новое сообщение](POST /messages) с полем `buttons`. Поле представляет собой массив строк, каждая из которых содержит массив кнопок. В одной строке можно комбинировать URL-кнопки и Data-кнопки. +Для отправки используйте метод [Новое сообщение](/api/messages/create) с полем `buttons`. Поле представляет собой массив строк, каждая из которых содержит массив кнопок. В одной строке можно комбинировать URL-кнопки и Data-кнопки. **Сообщение с кнопками** @@ -110,7 +110,7 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ ``` -> Метод [Редактирование сообщения](PUT /messages/{id}) также поддерживает поле `buttons`. Для удаления всех кнопок передайте пустой массив `[]`. +> Метод [Редактирование сообщения](/api/messages/update) также поддерживает поле `buttons`. Для удаления всех кнопок передайте пустой массив `[]`. ## Обработка нажатий @@ -135,17 +135,19 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ После получения события вы можете: -- [Отредактировать сообщение](PUT /messages/{id}) — убрать кнопки, добавить новые или обновить текст -- [Отправить новое сообщение](POST /messages) — как ответ пользователю с результатом действия +- [Отредактировать сообщение](/api/messages/update) — убрать кнопки, добавить новые или обновить текст +- [Отправить новое сообщение](/api/messages/create) — как ответ пользователю с результатом действия - [Открыть модальную форму](/guides/forms/overview) — используя `trigger_id` из вебхука (действителен 3 секунды) ## Ограничения -- Максимальное количество кнопок в строке — 8 -- Максимальное число кнопок у сообщения — 100 +- Максимальное количество строк с кнопками — 32 - Максимальная длина `text` на кнопке — 255 символов - Максимальная длина `data` у кнопки — 255 символов +Количество кнопок внутри строки API не ограничивает, но в интерфейсе строка не +переносится: больше пяти-шести кнопок в ряд читаются плохо на узких экранах. + ## Связанные разделы diff --git a/apps/docs/public/guides/dlp.md b/apps/docs/public/guides/dlp.md index e0a097c21..f113e2435 100644 --- a/apps/docs/public/guides/dlp.md +++ b/apps/docs/public/guides/dlp.md @@ -193,11 +193,11 @@ - `message_id: integer, int32` (required) — Идентификатор сообщения - `chat_id: integer, int32` (required) — Идентификатор чата - `user_id: integer, int32` (required) — Идентификатор пользователя -- `action_message: string` (required) — Описание действия. `null`, если у действия правила текст не задан. +- `action_message: string` (required, nullable) — Описание действия. `null`, если у действия правила текст не задан. - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали) -Получить такие события можно методом [Журнал аудита событий](GET /audit_events) с фильтром `event_key=dlp_violation_detected`. Подробнее — в [гайде по журналу аудита](/guides/audit-events). +Получить такие события можно методом [Журнал аудита событий](/api/security/list) с фильтром `event_key=dlp_violation_detected`. Подробнее — в [гайде по журналу аудита](/guides/audit-events). ## Связанные разделы diff --git a/apps/docs/public/guides/export.md b/apps/docs/public/guides/export.md index 359e5e845..f5b8a31a2 100644 --- a/apps/docs/public/guides/export.md +++ b/apps/docs/public/guides/export.md @@ -32,7 +32,7 @@ - максимальный количество запрашиваемых чатов (при указании): 50 - новый запрос на экспорта вы сможете сделать после завершения текущего -Для запроса экспорта используйте метод [Экспорт сообщений](POST /chats/exports). +Для запроса экспорта используйте метод [Экспорт сообщений](/api/chats/request-export). Экспорт выполняется асинхронно. На указанный `webhook_url` будет отправлен `JSON` с информацией о готовом экспорте. @@ -50,7 +50,7 @@ Получив `JSON` с информацией о готовом экспорте, вам необходимо взять значение поля `export_id` и выполнить запрос на скачивание архива сообщений, указав его в `URL` запроса. -Для скачивания архива используйте метод [Скачать архив экспорта](GET /chats/exports/{id}). +Для скачивания архива используйте метод [Скачать архив экспорта](/api/chats/download-export). ### Шаг 3. Изучите структуру архива @@ -79,9 +79,9 @@ - `id: integer` — Идентификатор сообщения. Пример: `12345` - `created_at: date-time` — Дата и время создания сообщения (ISO-8601, UTC+0). Пример: `"2024-01-15T10:30:00.000Z"` -- `deleted_at: date-time` — Дата и время удаления сообщения. Возвращается как null, если сообщение не удалено. +- `deleted_at: date-time` (nullable) — Дата и время удаления сообщения. Возвращается как null, если сообщение не удалено. - `content: string` — Текст сообщения. Пример: `"Привет! Как дела?"` -- `thread_id: integer` — Идентификатор треда сообщения. Возвращается как null, если у сообщения нет комментариев. +- `thread_id: integer` (nullable) — Идентификатор треда сообщения. Возвращается как null, если у сообщения нет комментариев. - `reactions: array of object` — Массив списка реакций - `user_id: integer` — Идентификатор пользователя, который добавил реакцию - `created_at: string` — Дата и время добавления реакции (ISO-8601, UTC+0) @@ -108,7 +108,7 @@ - `email: string` — Электронная почта - `tags: array of string` — Массив тегов - `tags: array of string` — Массив тегов, привязанных к чату -- `thread: object` — Тред, в котором находится сообщение. Возвращается как null, если сообщение находится не в треде. +- `thread: object` (nullable) — Тред, в котором находится сообщение. Возвращается как null, если сообщение находится не в треде. - `id: integer` — Идентификатор треда - `message_id: integer` — Идентификатор сообщения, под которым был начат тред - `message_chat_id: string` — Идентификатор чата, в котором был начат тред diff --git a/apps/docs/public/guides/forms/blocks.md b/apps/docs/public/guides/forms/blocks.md index 37bfbfca5..1009b5a82 100644 --- a/apps/docs/public/guides/forms/blocks.md +++ b/apps/docs/public/guides/forms/blocks.md @@ -80,8 +80,8 @@ - `placeholder: string` (max length: 150) — Подсказка внутри поля ввода, пока оно пустое. Пример: `"Куда собираетесь и что будете делать"` - `multiline: boolean` (default: false) — Многострочное поле. Пример: `true` - `initial_value: string` (max length: 3000) — Начальное значение в поле. Пример: `"Начальный текст"` -- `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.. Пример: `10` -- `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.. Пример: `500` +- `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку. Пример: `10` +- `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку. Пример: `500` - `required: boolean` (default: false) — Обязательность. Пример: `true` - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом. Пример: `"Возможно вам подскаджут, какие места лучше посетить"` @@ -102,7 +102,7 @@ - `options: array of object` (max items: 100) — Массив доступных пунктов в выпадающем списке - `text: string` (required, max length: 75) — Отображаемый текст. Пример: `"Ничего"` - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта. Пример: `"nothing"` - - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.. Пример: `true` + - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран. Пример: `true` - `required: boolean` (default: false) — Обязательность. Пример: `false` - `hint: string` (max length: 2000) — Подсказка, которая отображается под выпадающим списком серым цветом. Пример: `"Выберите одну из команд"` @@ -124,7 +124,7 @@ - `text: string` (required, max length: 75) — Отображаемый текст. Пример: `"Ничего"` - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта. Пример: `"nothing"` - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом. Пример: `"Каждый день бот будет присылать список новых задач в вашей команде"` - - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.. Пример: `true` + - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран. Пример: `true` - `required: boolean` (default: false) — Обязательность. Пример: `true` - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой радиокнопок серым цветом. Пример: `"Если вы не планируете выходить на связь, то выберите вариант Ничего"` @@ -200,8 +200,8 @@ Значения: `file_input` — Для загрузки файлов всегда file_input - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения. Пример: `"request_doc"` - `label: string` (required, max length: 150) — Подпись к полю. Пример: `"Заявление"` -- `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты.. Пример: `["pdf","jpg","png"]` -- `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле.. Пример: `1` +- `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты. Пример: `["pdf","jpg","png"]` +- `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле. Пример: `1` - `required: boolean` (default: false) — Обязательность. Пример: `true` - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом. Пример: `"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)"` diff --git a/apps/docs/public/guides/forms/handling.md b/apps/docs/public/guides/forms/handling.md index 82a41af43..6fd7880c8 100644 --- a/apps/docs/public/guides/forms/handling.md +++ b/apps/docs/public/guides/forms/handling.md @@ -9,7 +9,7 @@ Чтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший `trigger_id`. Это требование связано с тем, чтобы приложение открывало модальное окно только с разрешения пользователя и делало это быстро. -Для открытия представления используйте метод [Открытие представления](POST /views/open). +Для открытия представления используйте метод [Открытие представления](/api/views/open). > **Важно:** С целью поддержания интерактивности и отзывчивости интерфейсов Пачки, срок жизни `trigger_id` ограничен и составляет **3 секунды** @@ -33,11 +33,11 @@ Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы -- `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` -- `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` -- `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` +- `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` +- `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` -- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные +- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` @@ -47,8 +47,8 @@ { "type": "view", "event": "submit", - "private_metadata": "{'timeoff_id':4378}", - "callback_id": "timeoff_reguest_form", + "private_metadata": "{\"timeoff_id\":4378}", + "callback_id": "timeoff_request_form", "user_id": 1235523, "data": { "date_start": "2025-07-01", diff --git a/apps/docs/public/guides/incoming-webhooks.md b/apps/docs/public/guides/incoming-webhooks.md index d740b238b..d6b12e735 100644 --- a/apps/docs/public/guides/incoming-webhooks.md +++ b/apps/docs/public/guides/incoming-webhooks.md @@ -27,7 +27,7 @@ ### Шаг 4. Добавьте бота в нужные чаты -Сообщения от вебхука публикуются во все групповые чаты, где состоит бот. Добавьте бота в чаты, в которые хотите получать уведомления — через настройки чата или через API-метод [Добавление пользователей](POST /chats/{id}/members). +Сообщения от вебхука публикуются во все групповые чаты, где состоит бот. Добавьте бота в чаты, в которые хотите получать уведомления — через настройки чата или через API-метод [Добавление пользователей](/api/members/add). ### Шаг 5. Сервис отправляет POST-запрос @@ -120,23 +120,23 @@ Liquid также поддерживает: ## Настройка через API -Все эти настройки можно задать программно, без интерфейса — методами [Новый бот](POST /bots) и [Редактирование бота](PUT /bots/{id}): +Все эти настройки можно задать программно, без интерфейса — методами [Новый бот](/api/bots/create) и [Редактирование бота](/api/bots/update): - `template` — шаблон сообщения - `template_engine` — шаблонизатор (`liquid` или `mustache`) - `challenge_key` — поле для верификации - `link_preview_enabled` — показывать превью ссылок -Текущие значения возвращаются в объекте бота и доступны через метод [Информация о боте](GET /bots/{id}). +Текущие значения возвращаются в объекте бота и доступны через метод [Информация о боте](/api/bots/get). ## Ограничения > **Внимание:** Входящий вебхук не позволяет отправить личное сообщение или указать конкретный чат. Сообщение публикуется во **все групповые чаты**, где состоит бот. Для отправки в конкретный чат или личное сообщение - используйте API-метод [Новое сообщение](POST /messages). + используйте API-метод [Новое сообщение](/api/messages/create). -- **Максимальная длина сообщения** — 40 000 символов. Если результат шаблона превышает этот лимит, сообщение не будет отправлено. +- **Максимальная длина сообщения** — 40 000 байт. Для кириллицы это около 20 000 символов, поскольку каждый символ занимает два байта. Если результат шаблона превышает лимит, сообщение не будет отправлено. - **Пустое сообщение** — если шаблон возвращает пустую строку, сообщение не будет отправлено. - **Ошибка в шаблоне** — если шаблон содержит синтаксическую ошибку, в чат будет отправлено сообщение вида `Ошибка в шаблоне: описание ошибки`. diff --git a/apps/docs/public/guides/link-previews.md b/apps/docs/public/guides/link-previews.md index 9e13baf74..65a6a94a3 100644 --- a/apps/docs/public/guides/link-previews.md +++ b/apps/docs/public/guides/link-previews.md @@ -31,7 +31,7 @@ Unfurling — это создание превью ссылки в сообще ### Шаг 5. Отправьте превью -Вызовите метод [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews), передав заголовок, описание и изображение для каждой ссылки. +Вызовите метод [Unfurl (разворачивание ссылок)](/api/messages/unfurl), передав заголовок, описание и изображение для каждой ссылки. ## Правила распознавания доменов @@ -65,7 +65,7 @@ Unfurling — это создание превью ссылки в сообще ## Создание превью -Для создания превью используйте метод [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews), передав `message_id` из вебхука. +Для создания превью используйте метод [Unfurl (разворачивание ссылок)](/api/messages/unfurl), передав `message_id` из вебхука. Тело запроса — объект `link_previews`, где каждый ключ — URL из массива `links` вебхука: @@ -95,7 +95,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ Изображение можно указать двумя способами: - **По ссылке** — параметр `image_url` с публичным URL изображения -- **Загрузкой файла** — параметр `image` с данными, полученными через метод [Загрузка файлов](POST /direct_url). Если указаны оба параметра, `image` является приоритетным +- **Загрузкой файла** — параметр `image` с данными, полученными через метод [Загрузка файлов](/api/files/direct-url). Если указаны оба параметра, `image` является приоритетным > **Внимание:** Если среди переданных URL будет ошибка (URL отсутствует в сообщении или домен не указан в настройках бота), запрос не будет выполнен — не будет создано ни одного превью. diff --git a/apps/docs/public/guides/markdown.md b/apps/docs/public/guides/markdown.md index 05f06bf1a..a28bd2c03 100644 --- a/apps/docs/public/guides/markdown.md +++ b/apps/docs/public/guides/markdown.md @@ -8,7 +8,7 @@ ## Где применяется -- **Сообщения** — поле `content` метода [Новое сообщение](POST /messages) и [Редактирование сообщения](PUT /messages/{id}) интерпретируется как markdown. Альтернатива — структурная пара `text` + `markup`, тогда markdown не разбирается. +- **Сообщения** — поле `content` метода [Новое сообщение](/api/messages/create) и [Редактирование сообщения](/api/messages/update) интерпретируется как markdown. Альтернатива — структурная пара `text` + `markup`, тогда markdown не разбирается. - **Входящие вебхуки** — текст, который шаблонизатор подставляет в сообщение, см. [Входящие вебхуки](/guides/incoming-webhooks). - **Блоки форм** — поле `text` блока `markdown`, см. [Блоки представления](/guides/forms/blocks). diff --git a/apps/docs/public/guides/n8n/advanced.md b/apps/docs/public/guides/n8n/advanced.md index d9acdbc5f..98ea53c77 100644 --- a/apps/docs/public/guides/n8n/advanced.md +++ b/apps/docs/public/guides/n8n/advanced.md @@ -135,7 +135,7 @@ 1. Пользователь нажимает Data-кнопку в сообщении бота 2. Бот получает вебхук с `trigger_id` -3. Бот вызывает [Открытие представления](POST /views/open) с `trigger_id` и описанием формы +3. Бот вызывает [Открытие представления](/api/views/open) с `trigger_id` и описанием формы 4. Пользователь видит модальное окно с полями **Ключевые параметры:** @@ -204,7 +204,7 @@ AI Agent самостоятельно выбирает подходящий ин Ресурс **Message** с операцией **Unfurl** позволяет формировать кастомные превью для ссылок в сообщениях бота. -Когда бот отправляет сообщение со ссылкой, Пачка может запросить у бота данные для превью. Бот может ответить через [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) с заголовком, описанием и изображением. +Когда бот отправляет сообщение со ссылкой, Пачка может запросить у бота данные для превью. Бот может ответить через [Unfurl (разворачивание ссылок)](/api/messages/unfurl) с заголовком, описанием и изображением. Подробнее — в [документации разворачивания ссылок](/guides/link-previews). diff --git a/apps/docs/public/guides/n8n/resources.md b/apps/docs/public/guides/n8n/resources.md index 046b4305f..56841bab8 100644 --- a/apps/docs/public/guides/n8n/resources.md +++ b/apps/docs/public/guides/n8n/resources.md @@ -52,14 +52,14 @@ | Операция | API | |----------|-----| -| Create | [Новое сообщение](POST /messages) | -| Get Many | [Список сообщений чата](GET /messages) | -| Get | [Информация о сообщении](GET /messages/{id}) | -| Update | [Редактирование сообщения](PUT /messages/{id}) | -| Delete | [Удаление сообщения](DELETE /messages/{id}) | -| Pin | [Закрепление сообщения](POST /messages/{id}/pin) | -| Unpin | [Открепление сообщения](DELETE /messages/{id}/pin) | -| Unfurl | [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) | +| Create | [Новое сообщение](/api/messages/create) | +| Get Many | [Список сообщений чата](/api/messages/list) | +| Get | [Информация о сообщении](/api/messages/get) | +| Update | [Редактирование сообщения](/api/messages/update) | +| Delete | [Удаление сообщения](/api/messages/delete) | +| Pin | [Закрепление сообщения](/api/messages/pin) | +| Unpin | [Открепление сообщения](/api/messages/unpin) | +| Unfurl | [Unfurl (разворачивание ссылок)](/api/messages/unfurl) | **Ключевые параметры Create:** `entityId` (ID чата или пользователя), `content` (текст, Markdown), `entityType` (discussion, user, thread), `files`, `buttons`, `parentMessageId`. @@ -78,14 +78,14 @@ | Операция | API | |----------|-----| -| Create | [Новый чат](POST /chats) | -| Get Many | [Список чатов](GET /chats) | -| Get | [Информация о чате](GET /chats/{id}) | -| Update | [Редактирование чата](PUT /chats/{id}) | -| Archive | [Архивация чата](PUT /chats/{id}/archive) | -| Unarchive | [Разархивация чата](PUT /chats/{id}/unarchive) | -| Request Export | [Экспорт сообщений](POST /chats/exports) | -| Download Export | [Скачивание экспорта](GET /chats/exports/{id}) | +| Create | [Новый чат](/api/chats/create) | +| Get Many | [Список чатов](/api/chats/list) | +| Get | [Информация о чате](/api/chats/get) | +| Update | [Редактирование чата](/api/chats/update) | +| Archive | [Архивация чата](/api/chats/archive) | +| Unarchive | [Разархивация чата](/api/chats/unarchive) | +| Request Export | [Экспорт сообщений](/api/chats/request-export) | +| Download Export | [Скачивание экспорта](/api/chats/download-export) | **Сортировка в Get Many:** параметры `sort` (`id` или `last_message_at`) и `order` (`asc` / `desc`). Также доступны фильтры `availability`, `lastMessageAtAfter`, `lastMessageAtBefore`. @@ -102,13 +102,13 @@ | Операция | API | |----------|-----| -| Get Many | [Список участников чата](GET /chats/{id}/members) | -| Create | [Добавление пользователей](POST /chats/{id}/members) | -| Delete | [Исключение пользователя](DELETE /chats/{id}/members/{user_id}) | -| Update | [Редактирование роли](PUT /chats/{id}/members/{user_id}) | -| Leave | [Выход из беседы или канала](DELETE /chats/{id}/leave) | -| Add Group Tags | [Добавление тегов](POST /chats/{id}/group_tags) | -| Remove Group Tags | [Исключение тега](DELETE /chats/{id}/group_tags/{tag_id}) | +| Get Many | [Список участников чата](/api/members/list) | +| Create | [Добавление пользователей](/api/members/add) | +| Delete | [Исключение пользователя](/api/members/remove) | +| Update | [Редактирование роли](/api/members/update) | +| Leave | [Выход из беседы или канала](/api/members/leave) | +| Add Group Tags | [Добавление тегов](/api/members/add-group-tags) | +| Remove Group Tags | [Исключение тега](/api/members/remove-group-tag) | --- @@ -118,16 +118,16 @@ | Операция | API | |----------|-----| -| Create | [Новый сотрудник](POST /users) | -| Get Many | [Список сотрудников](GET /users) | -| Get | [Информация о сотруднике](GET /users/{id}) | -| Update | [Редактирование сотрудника](PUT /users/{id}) | -| Delete | [Удаление сотрудника](DELETE /users/{id}) | -| Update Avatar | [Загрузка аватара сотрудника](PUT /users/{user_id}/avatar) | -| Delete Avatar | [Удаление аватара сотрудника](DELETE /users/{user_id}/avatar) | -| Get Status | [Статус сотрудника](GET /users/{user_id}/status) | -| Update Status | [Новый статус сотрудника](PUT /users/{user_id}/status) | -| Delete Status | [Удаление статуса сотрудника](DELETE /users/{user_id}/status) | +| Create | [Новый сотрудник](/api/users/create) | +| Get Many | [Список сотрудников](/api/users/list) | +| Get | [Информация о сотруднике](/api/users/get) | +| Update | [Редактирование сотрудника](/api/users/update) | +| Delete | [Удаление сотрудника](/api/users/delete) | +| Update Avatar | [Загрузка аватара сотрудника](/api/users/update-avatar) | +| Delete Avatar | [Удаление аватара сотрудника](/api/users/remove-avatar) | +| Get Status | [Статус сотрудника](/api/users/get-status) | +| Update Status | [Новый статус сотрудника](/api/users/update-status) | +| Delete Status | [Удаление статуса сотрудника](/api/users/remove-status) | --- @@ -137,12 +137,12 @@ | Операция | API | |----------|-----| -| Create | [Новый тег](POST /group_tags) | -| Get Many | [Список тегов сотрудников](GET /group_tags) | -| Get | [Информация о теге](GET /group_tags/{id}) | -| Update | [Редактирование тега](PUT /group_tags/{id}) | -| Delete | [Удаление тега](DELETE /group_tags/{id}) | -| Get Many Users | [Список сотрудников тега](GET /group_tags/{id}/users) | +| Create | [Новый тег](/api/group-tags/create) | +| Get Many | [Список тегов сотрудников](/api/group-tags/list) | +| Get | [Информация о теге](/api/group-tags/get) | +| Update | [Редактирование тега](/api/group-tags/update) | +| Delete | [Удаление тега](/api/group-tags/delete) | +| Get Many Users | [Список сотрудников тега](/api/group-tags/list-users) | --- @@ -152,10 +152,10 @@ | Операция | API | |----------|-----| -| Create | [Новый тред](POST /messages/{id}/thread) | -| Create Standalone | [Новый самостоятельный тред](POST /threads) | -| Get | [Информация о треде](GET /threads/{id}) | -| Get Many | [Список тредов](GET /threads) | +| Create | [Новый тред](/api/threads/add) | +| Create Standalone | [Новый самостоятельный тред](/api/threads/create) | +| Get | [Информация о треде](/api/threads/get) | +| Get Many | [Список тредов](/api/threads/list) | --- @@ -165,9 +165,9 @@ | Операция | API | |----------|-----| -| Create | [Добавление реакции](POST /messages/{id}/reactions) | -| Delete | [Удаление реакции](DELETE /messages/{id}/reactions) | -| Get Many | [Список реакций](GET /messages/{id}/reactions) | +| Create | [Добавление реакции](/api/reactions/add) | +| Delete | [Удаление реакции](/api/reactions/remove) | +| Get Many | [Список реакций](/api/reactions/list) | --- @@ -177,12 +177,12 @@ | Операция | API | |----------|-----| -| Get | [Свой профиль](GET /profile) | -| Update Avatar | [Загрузка своего аватара](PUT /profile/avatar) | -| Delete Avatar | [Удаление своего аватара](DELETE /profile/avatar) | -| Get Status | [Свой статус](GET /profile/status) | -| Update Status | [Новый свой статус](PUT /profile/status) | -| Delete Status | [Удаление своего статуса](DELETE /profile/status) | +| Get | [Свой профиль](/api/profile/get) | +| Update Avatar | [Загрузка своего аватара](/api/profile/update-avatar) | +| Delete Avatar | [Удаление своего аватара](/api/profile/delete-avatar) | +| Get Status | [Свой статус](/api/profile/get-status) | +| Update Status | [Новый свой статус](/api/profile/update-status) | +| Delete Status | [Удаление своего статуса](/api/profile/delete-status) | **Загрузка аватара:** операция Update Avatar принимает бинарные данные из предыдущего узла (например, HTTP Request или Read Binary File). В поле **Input Binary Field** укажите имя бинарного свойства (по умолчанию `data`). @@ -194,7 +194,7 @@ | Операция | API | |----------|-----| -| Get Info | [Информация о токене](GET /oauth/token/info) | +| Get Info | [Информация о токене](/api/oauth/token-info) | --- @@ -204,11 +204,11 @@ | Операция | API | |----------|-----| -| Create | [Новое напоминание](POST /tasks) | -| Get Many | [Список напоминаний](GET /tasks) | -| Get | [Информация о напоминании](GET /tasks/{id}) | -| Update | [Редактирование напоминания](PUT /tasks/{id}) | -| Delete | [Удаление напоминания](DELETE /tasks/{id}) | +| Create | [Новое напоминание](/api/tasks/create) | +| Get Many | [Список напоминаний](/api/tasks/list) | +| Get | [Информация о напоминании](/api/tasks/get) | +| Update | [Редактирование напоминания](/api/tasks/update) | +| Delete | [Удаление напоминания](/api/tasks/delete) | **Типы задач:** `call`, `email`, `event`, `meeting`, `reminder`. @@ -220,16 +220,16 @@ | Операция | API | |----------|-----| -| Create | [Новый бот](POST /bots) | -| Get | [Информация о боте](GET /bots/{id}) | -| Get Many | [Список ботов](GET /bots) | -| Update | [Редактирование бота](PUT /bots/{id}) | -| Delete | [Удаление бота](DELETE /bots/{id}) | -| Update Webhook | [Саморегистрация вебхука бота](PUT /bot/webhook) | -| Recreate Token | [Ротация токена бота](POST /bots/{id}/recreate_token) | -| Recreate Token Self | [Ротация собственного токена бота](POST /bot/recreate_token) | -| Get Many Events | [История событий](GET /webhooks/events) | -| Remove Events | [Удаление события](DELETE /webhooks/events/{id}) | +| Create | [Новый бот](/api/bots/create) | +| Get | [Информация о боте](/api/bots/get) | +| Get Many | [Список ботов](/api/bots/list) | +| Update | [Редактирование бота](/api/bots/update) | +| Delete | [Удаление бота](/api/bots/delete) | +| Update Webhook | [Саморегистрация вебхука бота](/api/bots/update-webhook) | +| Recreate Token | [Ротация токена бота](/api/bots/recreate-token) | +| Recreate Token Self | [Ротация собственного токена бота](/api/bots/recreate-token-self) | +| Get Many Events | [История событий](/api/bots/list-events) | +| Remove Events | [Удаление события](/api/bots/remove-event) | --- @@ -239,9 +239,9 @@ | Операция | API | |----------|-----| -| Create | [Загрузка файла](POST /uploads) | +| Create | [Загрузка файла](/api/files/uploads) | -Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#zagruzka-fajlov). +Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#zagruzka-faylov). --- @@ -251,7 +251,7 @@ | Операция | API | |----------|-----| -| Create | [Открытие представления](POST /views/open) | +| Create | [Открытие представления](/api/views/open) | Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#formy) и в [документации форм](/guides/forms/overview). @@ -263,7 +263,7 @@ | Операция | API | |----------|-----| -| Get | [Список дополнительных полей](GET /custom_properties) | +| Get | [Список дополнительных полей](/api/custom-properties/list) | --- @@ -273,7 +273,7 @@ | Операция | API | |----------|-----| -| Get Many Read Member IDs | [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) | +| Get Many Read Member IDs | [Список прочитавших сообщение](/api/read-member/list-readers) | --- @@ -283,9 +283,9 @@ | Операция | API | |----------|-----| -| Get Many Chats | [Поиск чатов](GET /search/chats) | -| Get Many Messages | [Поиск сообщений](GET /search/messages) | -| Get Many Users | [Поиск сотрудников](GET /search/users) | +| Get Many Chats | [Поиск чатов](/api/search/list-chats) | +| Get Many Messages | [Поиск сообщений](/api/search/list-messages) | +| Get Many Users | [Поиск сотрудников](/api/search/list-users) | **Обязательный параметр:** `query` — строка поиска. @@ -297,7 +297,7 @@ | Операция | API | |----------|-----| -| Get Many | [Журнал аудита событий](GET /audit_events) | +| Get Many | [Журнал аудита событий](/api/security/list) | **Фильтры:** `eventKey`, `actorId`, `actorType`, `entityId`, `entityType`, `startTime`, `endTime`. @@ -354,7 +354,7 @@ n8n автоматически отправляет повторные запр Для поля **Chat ID** доступен поиск по имени: начните вводить текст, и n8n покажет подходящие результаты из вашего пространства Пачки. -Поиск вызывает API-эндпоинт [Поиск чатов](GET /search/chats) и работает только с валидным `Access Token` в Credentials. +Поиск вызывает API-эндпоинт [Поиск чатов](/api/search/list-chats) и работает только с валидным `Access Token` в Credentials. ## Связанные разделы diff --git a/apps/docs/public/guides/n8n/setup.md b/apps/docs/public/guides/n8n/setup.md index 202b4f84f..ccb13ccc8 100644 --- a/apps/docs/public/guides/n8n/setup.md +++ b/apps/docs/public/guides/n8n/setup.md @@ -5,6 +5,10 @@ # Начало работы +- [Pachca](https://n8n.io/integrations/pachca/) витрина · verified +- [Pachca Trigger](https://n8n.io/integrations/pachca-trigger/) витрина · verified +- [n8n-nodes-pachca](https://www.npmjs.com/package/n8n-nodes-pachca) npm + ## Где запустить n8n @@ -152,7 +156,7 @@ Credentials — данные для авторизации. Перейдите Доступные операции зависят от [скоупов](/api/authorization#skoupy) токена, а не от его типа. Подробнее — в разделе [Авторизация](/api/authorization). -После заполнения полей нажмите **Test** — n8n проверит подключение вызовом [Информация о токене](GET /oauth/token/info). При успехе вы увидите подтверждение. +После заполнения полей нажмите **Test** — n8n проверит подключение вызовом [Информация о токене](/api/oauth/token-info). При успехе вы увидите подтверждение. ![Успешная проверка Credentials](/images/n8n/credentials-test.avif) diff --git a/apps/docs/public/guides/n8n/testing.md b/apps/docs/public/guides/n8n/testing.md index 3c9837b84..433c1a0c3 100644 --- a/apps/docs/public/guides/n8n/testing.md +++ b/apps/docs/public/guides/n8n/testing.md @@ -83,14 +83,14 @@ ### Проверка Credentials -Перед первым запуском нажмите **Test** в форме Credentials. n8n вызовет [Информация о токене](GET /oauth/token/info) и покажет результат: +Перед первым запуском нажмите **Test** в форме Credentials. n8n вызовет [Информация о токене](/api/oauth/token-info) и покажет результат: ![Успешная проверка Credentials](/images/n8n/credentials-test.avif) *Connection tested successfully* -При ошибке 401 — токен неверный или просрочен. Симптомы и решения — в разделе [401 Unauthorized](/guides/n8n/troubleshooting#nevernyi-token-401-unauthorized). +При ошибке 401 — токен неверный или просрочен. Симптомы и решения — в разделе [401 Unauthorized](/guides/n8n/troubleshooting#nevernyy-token-401-unauthorized). ## Тестирование триггера @@ -119,7 +119,7 @@ Когда вы нажимаете **Listen for Test Event** на узле **Pachca Trigger** в автоматическом режиме: -1. n8n вызывает [Редактирование бота](PUT /bots/{id}) с `webhook_url = Test URL` +1. n8n вызывает [Редактирование бота](/api/bots/update) с `webhook_url = Test URL` 2. Пачка записывает Test URL в настройки бота (в слот `outgoing_url`) 3. В течение 120 секунд бот отправляет события не на Production URL, а на Test URL 4. n8n перехватывает событие и показывает его в редакторе @@ -150,14 +150,14 @@ ### Шаг 2. Временная деактивация продакшен-workflow -Если второго бота нет, деактивируйте продакшн-workflow перед тестом: нажмите **Active** в правом верхнем углу (переключатель станет серым). Узел **Pachca Trigger** вызовет [Редактирование бота](PUT /bots/{id}) с пустым `webhook_url` и освободит слот. +Если второго бота нет, деактивируйте продакшн-workflow перед тестом: нажмите **Active** в правом верхнем углу (переключатель станет серым). Узел **Pachca Trigger** вызовет [Редактирование бота](/api/bots/update) с пустым `webhook_url` и освободит слот. После этого запустите **Listen for Test Event**, проведите тест, снова активируйте workflow. На время теста продакшен будет выключен — учитывайте это, если на workflow приходит критичный трафик. ### Шаг 3. Подмена URL в ручном режиме -Оставьте **Webhook Setup** = **Manual** (значение по умолчанию) — в [ручном режиме](/guides/n8n/trigger#ruchnoi-rezhim) узел не управляет `outgoing_url`, и вы сами решаете, какой URL прописан в настройках бота в Пачке. Можно временно вручную заменить Production URL на Test URL в настройках бота, провести тест, затем вернуть Production URL обратно. +Оставьте **Webhook Setup** = **Manual** (значение по умолчанию) — в [ручном режиме](/guides/n8n/trigger#ruchnoy-rezhim) узел не управляет `outgoing_url`, и вы сами решаете, какой URL прописан в настройках бота в Пачке. Можно временно вручную заменить Production URL на Test URL в настройках бота, провести тест, затем вернуть Production URL обратно. Этот способ даёт максимальный контроль, но требует аккуратности — легко забыть вернуть Production URL. @@ -258,10 +258,10 @@ sequenceDiagram ## Если что-то пошло не так -- **Вебхук не приходит** — проверьте, что бот в чате и workflow активен. Симптомы и решения: [Вебхук не приходит](/guides/n8n/troubleshooting#vebkhuk-ne-prikhodit) +- **Вебхук не приходит** — проверьте, что бот в чате и workflow активен. Симптомы и решения: [Вебхук не приходит](/guides/n8n/troubleshooting#vebhuk-ne-prihodit) - **403 при активации Pachca Trigger** — токену не хватает прав: для токена бота `bot_self:webhook:write`, для персонального `bots:write` плюс доступ редактора к боту. Решение: [403 Forbidden при активации Pachca Trigger](/guides/n8n/troubleshooting#403-forbidden-pri-aktivatsii-pachca-trigger) - **Signature Mismatch** — Signing Secret в Credentials не совпадает с секретом бота. Решение: [Ошибка подписи](/guides/n8n/troubleshooting#oshibka-podpisi-signature-mismatch) -- **401 Unauthorized** — неверный или просроченный токен. Решение: [401 Unauthorized](/guides/n8n/troubleshooting#nevernyi-token-401-unauthorized) +- **401 Unauthorized** — неверный или просроченный токен. Решение: [401 Unauthorized](/guides/n8n/troubleshooting#nevernyy-token-401-unauthorized) Полный список типовых ошибок — в разделе [Устранение ошибок](/guides/n8n/troubleshooting). diff --git a/apps/docs/public/guides/n8n/trigger.md b/apps/docs/public/guides/n8n/trigger.md index 9536da437..e4653c550 100644 --- a/apps/docs/public/guides/n8n/trigger.md +++ b/apps/docs/public/guides/n8n/trigger.md @@ -78,7 +78,7 @@ Pachca Trigger поддерживает два режима настройки: | Режим | Что делает узел | Когда использовать | |-------|-----------------|---------------------| | **Ручной** (по умолчанию) | Не трогает настройки бота. Вы сами копируете Production URL из панели узла и вставляете его в настройки бота в Пачке. | Работает с любым токеном, включая токены ботов. Не может случайно перезатереть webhook-слот. | -| **Автоматический** | При активации workflow регистрирует Production URL в настройках бота, при деактивации — очищает. С **токеном бота** — саморегистрация через [Саморегистрация вебхука бота](PUT /bot/webhook), без Bot ID. С **персональным токеном** — через [Редактирование бота](PUT /bots/{id}): нужны скоуп `bots:write`, доступ редактора к боту и Bot ID. | Когда хотите, чтобы n8n сам управлял webhook-слотом бота. | +| **Автоматический** | При активации workflow регистрирует Production URL в настройках бота, при деактивации — очищает. С **токеном бота** — саморегистрация через [Саморегистрация вебхука бота](/api/bots/update-webhook), без Bot ID. С **персональным токеном** — через [Редактирование бота](/api/bots/update): нужны скоуп `bots:write`, доступ редактора к боту и Bot ID. | Когда хотите, чтобы n8n сам управлял webhook-слотом бота. | > По умолчанию установлен **ручной режим** — он работает с любым типом токена и не может случайно перезаписать webhook-слот бота. @@ -93,7 +93,7 @@ Pachca Trigger поддерживает два режима настройки: *Настройка Pachca Trigger* -Режим по умолчанию. Узел не обращается к [Редактирование бота](PUT /bots/{id}) — вы копируете Webhook URL из n8n и вставляете его в настройки бота в Пачке самостоятельно. При деактивации workflow узел тоже ничего не делает со слотом. +Режим по умолчанию. Узел не обращается к [Редактирование бота](/api/bots/update) — вы копируете Webhook URL из n8n и вставляете его в настройки бота в Пачке самостоятельно. При деактивации workflow узел тоже ничего не делает со слотом. ### Шаг 1. Добавьте Pachca Trigger @@ -117,7 +117,7 @@ Pachca Trigger поддерживает два режима настройки: ### Шаг 3. Вставьте URL в настройки бота в Пачке -Откройте настройки вашего бота в Пачке, перейдите на вкладку **Исходящий Webhook** и вставьте скопированный Production URL в поле **Webhook URL**. Подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroiki). +Откройте настройки вашего бота в Пачке, перейдите на вкладку **Исходящий Webhook** и вставьте скопированный Production URL в поле **Webhook URL**. Подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroyki). ### Шаг 4. Вернитесь в n8n и активируйте @@ -138,7 +138,7 @@ Pachca Trigger поддерживает два режима настройки: *Автоматический режим: переключатель Webhook Setup и поле Bot ID (нужно только для персонального токена)* -Узел определяет тип токена методом [Свой профиль](GET /profile). **Токен бота** регистрирует свой вебхук сам — методом [Саморегистрация вебхука бота](PUT /bot/webhook), Bot ID не нужен. **Персональный токен** прописывает вебхук выбранному боту методом [Редактирование бота](PUT /bots/{id}) — Bot ID обязателен, потому что персональный токен не привязан к конкретному боту. +Узел определяет тип токена методом [Свой профиль](/api/profile/get). **Токен бота** регистрирует свой вебхук сам — методом [Саморегистрация вебхука бота](/api/bots/update-webhook), Bot ID не нужен. **Персональный токен** прописывает вебхук выбранному боту методом [Редактирование бота](/api/bots/update) — Bot ID обязателен, потому что персональный токен не привязан к конкретному боту. ### Шаг 1. Вставьте токен в Credentials @@ -214,7 +214,7 @@ sequenceDiagram ### Проверка подписи -Для защиты от поддельных запросов добавьте **Signing Secret** бота в [Credentials](/guides/n8n/setup#sozdanie-credentials). Trigger автоматически проверяет HMAC-SHA256 подпись каждого входящего запроса через заголовок `pachca-signature` и отклоняет невалидные. +Для защиты от поддельных запросов добавьте **Signing Secret** бота в [Credentials](/guides/n8n/setup#nastroyka-credentials). Trigger автоматически проверяет HMAC-SHA256 подпись каждого входящего запроса через заголовок `pachca-signature` и отклоняет невалидные. Подробнее о механизме подписи — в разделе [Безопасность и обработчик](/guides/webhook/handler#bezopasnost). @@ -223,7 +223,7 @@ sequenceDiagram ### Ограничение по IP -Укажите **Webhook Allowed IPs** в [Credentials](/guides/n8n/setup#sozdanie-credentials) — через запятую список IP-адресов, с которых принимаются вебхуки. Пачка отправляет вебхуки с IP `37.200.70.177`. +Укажите **Webhook Allowed IPs** в [Credentials](/guides/n8n/setup#nastroyka-credentials) — через запятую список IP-адресов, с которых принимаются вебхуки. Пачка отправляет вебхуки с IP `37.200.70.177`. Если поле пустое — проверка IP отключена и запросы принимаются с любого адреса. diff --git a/apps/docs/public/guides/n8n/troubleshooting.md b/apps/docs/public/guides/n8n/troubleshooting.md index 3623f7d21..d1fc25ff2 100644 --- a/apps/docs/public/guides/n8n/troubleshooting.md +++ b/apps/docs/public/guides/n8n/troubleshooting.md @@ -64,7 +64,7 @@ ### 403 Forbidden при активации Pachca Trigger -**Причина:** узел попытался автоматически прописать Webhook URL, но у токена не хватает прав. Для **токена бота** нужен скоуп `bot_self:webhook:write` (саморегистрация через [Саморегистрация вебхука бота](PUT /bot/webhook)). Для **персонального токена** — скоуп `bots:write` и доступ редактора к указанному боту (регистрация через [Редактирование бота](PUT /bots/{id})). +**Причина:** узел попытался автоматически прописать Webhook URL, но у токена не хватает прав. Для **токена бота** нужен скоуп `bot_self:webhook:write` (саморегистрация через [Саморегистрация вебхука бота](/api/bots/update-webhook)). Для **персонального токена** — скоуп `bots:write` и доступ редактора к указанному боту (регистрация через [Редактирование бота](/api/bots/update)). Текст ошибки: @@ -78,7 +78,7 @@ 1. **Токен бота:** включите для бота скоуп `bot_self:webhook:write` — настройки бота → вкладка **API** 2. **Персональный токен:** убедитесь, что у пользователя токена стоит роль **Редактор** в списке доступов бота, и что у токена есть скоуп `bots:write` (в настройках токена в **Автоматизации** → **Интеграции** → **API**) -3. Либо переключите **Webhook Setup** = **Manual** и пропишите Production URL в настройках бота самостоятельно — см. [Ручной режим](/guides/n8n/trigger#ruchnoi-rezhim) +3. Либо переключите **Webhook Setup** = **Manual** и пропишите Production URL в настройках бота самостоятельно — см. [Ручной режим](/guides/n8n/trigger#ruchnoy-rezhim) --- @@ -142,7 +142,7 @@ ### Форма не открывается -**Причина:** `trigger_id` из события `button_pressed` действителен только **3 секунды**. Если между получением вебхука и вызовом [Открытие представления](POST /views/open) проходит больше времени — форма не откроется. +**Причина:** `trigger_id` из события `button_pressed` действителен только **3 секунды**. Если между получением вебхука и вызовом [Открытие представления](/api/views/open) проходит больше времени — форма не откроется. **Решение:** diff --git a/apps/docs/public/guides/n8n/workflows.md b/apps/docs/public/guides/n8n/workflows.md index c3d8c4724..13cc9f0d7 100644 --- a/apps/docs/public/guides/n8n/workflows.md +++ b/apps/docs/public/guides/n8n/workflows.md @@ -111,7 +111,7 @@ ] ``` -Подробнее о кнопках — в разделе [Продвинутые функции](/guides/n8n/advanced#knopki-v-soobshheniyax). +Подробнее о кнопках — в разделе [Продвинутые функции](/guides/n8n/advanced#knopki-v-soobscheniyah). - [approval.json](/workflows/n8n/approval.json) — Отправка запроса с кнопками - [approval-handler.json](/workflows/n8n/approval-handler.json) — Обработка нажатий кнопок @@ -176,7 +176,7 @@ **Что задействовано:** триггер, кнопки, формы, треды, условная логика. -> Подробнее о кнопках — в разделе [Кнопки в сообщениях](/guides/n8n/advanced#knopki-v-soobshheniyax), о формах — в разделе [Формы](/guides/n8n/advanced#formy). +> Подробнее о кнопках — в разделе [Кнопки в сообщениях](/guides/n8n/advanced#knopki-v-soobscheniyah), о формах — в разделе [Формы](/guides/n8n/advanced#formy). - [vacation.json](/workflows/n8n/vacation.json) — Приём команды и кнопка заявки diff --git a/apps/docs/public/guides/quickstart.md b/apps/docs/public/guides/quickstart.md index f70fde937..45e5458d6 100644 --- a/apps/docs/public/guides/quickstart.md +++ b/apps/docs/public/guides/quickstart.md @@ -17,14 +17,14 @@ Для работы с API вам нужен токен доступа. Есть два способа его получить: - **Персональный токен** — в интерфейсе Пачки: **Автоматизации** > **API** (доступно администраторам) -- **Токен бота** — создайте бота в **Автоматизации** > **Интеграции** > **Чат-боты и Вебхуки** или программно методом [Новый бот](POST /bots) +- **Токен бота** — создайте бота в **Автоматизации** > **Интеграции** > **Чат-боты и Вебхуки** или программно методом [Новый бот](/api/bots/create) > Подробнее о типах токенов и скоупах — в разделе [Авторизация](/api/authorization). ### Шаг 2. Проверьте токен -Получим информацию о своем профиле — простейший запрос [Свой профиль](GET /profile) без параметров: +Получим информацию о своем профиле — простейший запрос [Свой профиль](/api/profile/get) без параметров: **Получение профиля** @@ -41,7 +41,7 @@ curl "https://api.pachca.com/api/shared/v1/profile" \ ### Шаг 3. Создайте чат -Теперь создадим закрытый канал. Все параметры — в описании метода [Новый чат](POST /chats). +Теперь создадим закрытый канал. Все параметры — в описании метода [Новый чат](/api/chats/create). **Создание чата** @@ -66,7 +66,7 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ ``` -Укажите название чата и список участников. Идентификаторы сотрудников можно получить через метод [Список сотрудников](GET /users), а идентификаторы тегов — через метод [Список тегов](GET /group_tags). Запросы с телом отправляются в формате JSON с заголовком `Content-Type: application/json`. +Укажите название чата и список участников. Идентификаторы сотрудников можно получить через метод [Список сотрудников](/api/users/list), а идентификаторы тегов — через метод [Список тегов](/api/group-tags/list). Запросы с телом отправляются в формате JSON с заголовком `Content-Type: application/json`. ## Выберите путь работы с API diff --git a/apps/docs/public/guides/sdk/csharp.md b/apps/docs/public/guides/sdk/csharp.md index d3b514175..7af18dadb 100644 --- a/apps/docs/public/guides/sdk/csharp.md +++ b/apps/docs/public/guides/sdk/csharp.md @@ -38,7 +38,7 @@ using Pachca.Sdk; // Получение профиля var response = await client.Profile.GetProfileAsync(); -// → User(Id: int, FirstName: string, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?) +// → User(Id: int, FirstName: string?, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?) ``` @@ -450,7 +450,7 @@ var request = new TaskCreateRequest } }; var response = await client.Tasks.CreateTaskAsync(request); -// → Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List) +// → Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List) ``` diff --git a/apps/docs/public/guides/sdk/go.md b/apps/docs/public/guides/sdk/go.md index 4cee69748..75bbbc9e6 100644 --- a/apps/docs/public/guides/sdk/go.md +++ b/apps/docs/public/guides/sdk/go.md @@ -38,7 +38,7 @@ import pachca "github.com/pachca/openapi/sdk/go/generated" // Получение профиля response, err := client.Profile.GetProfile(ctx) -// → User{ID: int32, FirstName: string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string} +// → User{ID: int32, FirstName: *string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string} ``` @@ -428,7 +428,7 @@ request := TaskCreateRequest{ }, } response, err := client.Tasks.CreateTask(ctx, request) -// → Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}} +// → Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}} ``` diff --git a/apps/docs/public/guides/sdk/kotlin.md b/apps/docs/public/guides/sdk/kotlin.md index de6c8a3c3..1ebf84cd7 100644 --- a/apps/docs/public/guides/sdk/kotlin.md +++ b/apps/docs/public/guides/sdk/kotlin.md @@ -40,7 +40,7 @@ val client = PachcaClient("YOUR_TOKEN") ```kotlin // Получение профиля val response = client.profile.getProfile() -// → User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?) +// → User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?) ``` @@ -420,7 +420,7 @@ val request = TaskCreateRequest( ) ) val response = client.tasks.createTask(request = request) -// → Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List) +// → Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List) ``` diff --git a/apps/docs/public/guides/sdk/overview.md b/apps/docs/public/guides/sdk/overview.md index 62fd1848a..d01ec7d8d 100644 --- a/apps/docs/public/guides/sdk/overview.md +++ b/apps/docs/public/guides/sdk/overview.md @@ -14,6 +14,13 @@ ## Готовые SDK +- [TypeScript](/guides/sdk/typescript) npm · async/await · fetch +- [Python](/guides/sdk/python) PyPI · async/await · httpx +- [Go](/guides/sdk/go) go get · sync · net/http +- [Kotlin](/guides/sdk/kotlin) JitPack · coroutines · Ktor +- [Swift](/guides/sdk/swift) SPM · async throws · URLSession +- [C#](/guides/sdk/csharp) NuGet · async/await · HttpClient + Автоматически обновляются при каждом обновлении спецификации. [Исходный код на GitHub](https://github.com/pachca/openapi/tree/main/sdk). diff --git a/apps/docs/public/guides/sdk/python.md b/apps/docs/public/guides/sdk/python.md index fcd117801..2cc565d5a 100644 --- a/apps/docs/public/guides/sdk/python.md +++ b/apps/docs/public/guides/sdk/python.md @@ -36,7 +36,7 @@ client = PachcaClient("YOUR_TOKEN") ```python # Получение профиля response = await client.profile.get_profile() -# → User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) +# → User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) ``` @@ -403,7 +403,7 @@ request = TaskCreateRequest( ) ) response = await client.tasks.create_task(request=request) -# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)]) +# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)]) ``` diff --git a/apps/docs/public/guides/sdk/swift.md b/apps/docs/public/guides/sdk/swift.md index 84b84de75..6672adedf 100644 --- a/apps/docs/public/guides/sdk/swift.md +++ b/apps/docs/public/guides/sdk/swift.md @@ -44,7 +44,7 @@ import PachcaSDK // Получение профиля let response = try await client.profile.getProfile() -// → User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?) +// → User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?) ``` @@ -389,7 +389,7 @@ let body = TaskCreateRequest( ) ) let response = try await client.tasks.createTask(body: body) -// → Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)]) +// → Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)]) ``` diff --git a/apps/docs/public/guides/sdk/typescript.md b/apps/docs/public/guides/sdk/typescript.md index b5cd7db02..7436606a9 100644 --- a/apps/docs/public/guides/sdk/typescript.md +++ b/apps/docs/public/guides/sdk/typescript.md @@ -36,7 +36,7 @@ const client = new PachcaClient("YOUR_TOKEN") ```typescript // Получение профиля const response = client.profile.getProfile() -// → User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) +// → User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) ``` @@ -385,7 +385,7 @@ const request: MessageCreateRequest = { linkPreview: false } const response = client.messages.createMessage(request) -// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null }) +// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null }) // Список сотрудников const response = client.users.listUsers({ @@ -409,7 +409,7 @@ const request: TaskCreateRequest = { } } const response = client.tasks.createTask(request) -// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] }) +// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] }) ``` diff --git a/apps/docs/public/guides/threads.md b/apps/docs/public/guides/threads.md index a238d05cc..fd98a8a22 100644 --- a/apps/docs/public/guides/threads.md +++ b/apps/docs/public/guides/threads.md @@ -39,7 +39,7 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \ ### Самостоятельный тред -Самостоятельный тред не привязан к сообщению — его создают методом [Новый самостоятельный тред](POST /threads). Тело запроса не требуется, создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`. Метод требует скоуп `threads:create`. +Самостоятельный тред не привязан к сообщению — его создают методом [Новый самостоятельный тред](/api/threads/create). Тело запроса не требуется, создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`. Метод требует скоуп `threads:create`. **Создание самостоятельного треда** @@ -54,7 +54,7 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ ### Комментарии в тред -Комментарий в тред — это обычное сообщение через [Новое сообщение](POST /messages). Есть два равнозначных способа адресации. +Комментарий в тред — это обычное сообщение через [Новое сообщение](/api/messages/create). Есть два равнозначных способа адресации. **Способ 1: через идентификатор треда** — `entity_type: "thread"` и `entity_id` равным `thread.id`. @@ -75,7 +75,7 @@ pachca messages create \ --token YOUR_ACCESS_TOKEN ``` -Чтобы получить все комментарии треда — вызовите [Список сообщений чата](GET /messages) с `chat_id` равным `thread.chat_id`. +Чтобы получить все комментарии треда — вызовите [Список сообщений чата](/api/messages/list) с `chat_id` равным `thread.chat_id`. ## Структура треда @@ -83,9 +83,9 @@ pachca messages create \ | Поле | Что обозначает | Когда нужно | |------|----------------|-------------| -| `id` | Идентификатор треда как сущности | В методе [Информация о треде](GET /threads/{id}) | -| `chat_id` | Идентификатор **чата треда** — отдельного чата, в котором хранятся комментарии треда | Для отправки комментария [Новое сообщение](POST /messages) и для чтения [Список сообщений чата](GET /messages) | -| `message_id` | Идентификатор родительского сообщения, к которому привязан тред. `null` у самостоятельного треда | При создании треда у сообщения — в методе [Создание треда](POST /messages/{id}/thread) | +| `id` | Идентификатор треда как сущности | В методе [Информация о треде](/api/threads/get) | +| `chat_id` | Идентификатор **чата треда** — отдельного чата, в котором хранятся комментарии треда | Для отправки комментария [Новое сообщение](/api/messages/create) и для чтения [Список сообщений чата](/api/messages/list) | +| `message_id` | Идентификатор родительского сообщения, к которому привязан тред. `null` у самостоятельного треда | При создании треда у сообщения — в методе [Создание треда](/api/threads/add) | | `message_chat_id` | Идентификатор чата, в котором находится родительское сообщение. `null` у самостоятельного треда | Для проверки контекста | Когда вы получаете обычное сообщение через API, в поле `thread` будет короткий объект `{ id, chat_id }`, если у этого сообщения **есть тред** (то есть сообщение — родительское для треда). Если сообщение само живёт **внутри треда** (это комментарий), у него будет: @@ -96,7 +96,7 @@ pachca messages create \ ## Список доступных тредов -Метод [Список тредов](GET /threads) возвращает все доступные вам треды: +Метод [Список тредов](/api/threads/list) возвращает все доступные вам треды: - **Треды, в которых вы состоите напрямую** — вас явно добавили в сам тред (в том числе через сквозной тред, без участия в родительском чате), а также самостоятельные треды, которые вы создали. - **Все треды чатов, в которых вы состоите** — даже если в самом треде вы не участвуете. Например, если вы участник канала «Маркетинг», в выдачу попадут все треды этого канала, в том числе те, в которые вы лично не писали. @@ -108,17 +108,17 @@ pachca messages create \ ## Участники треда -У треда, как у самостоятельного чата, есть свой список участников, отдельный от родительского чата. Получить его можно методом [Список участников чата](GET /chats/{id}/members) с `chat_id` треда. +У треда, как у самостоятельного чата, есть свой список участников, отдельный от родительского чата. Получить его можно методом [Список участников чата](/api/members/list) с `chat_id` треда. Добавить участника в тред можно двумя способами: -- **Через API** — метод [Добавление участников](POST /chats/{id}/members), передав `chat_id` **треда** (не родительского чата). Если добавляемый сотрудник не состоит в родительском чате, он станет участником сквозного треда: будет видеть тред и родительское сообщение, но не остальную историю. +- **Через API** — метод [Добавление участников](/api/members/add), передав `chat_id` **треда** (не родительского чата). Если добавляемый сотрудник не состоит в родительском чате, он станет участником сквозного треда: будет видеть тред и родительское сообщение, но не остальную историю. - **Через упоминание `@nickname`** в комментарии треда — добавляется автоматически. Для ботов работает только если бот настроен как **публичный** (см. [Доступы бота](/guides/bots/access#tredy)). -> Если нужно упомянуть участника в треде, но **не** добавлять его автоматически — передайте `skip_invite_mentions: true` в теле метода [Новое сообщение](POST /messages). Упоминание останется в тексте, но в участники треда человек не попадёт. Полезно, когда бот ссылается на сотрудника для контекста, не втягивая его в обсуждение. +> Если нужно упомянуть участника в треде, но **не** добавлять его автоматически — передайте `skip_invite_mentions: true` в теле метода [Новое сообщение](/api/messages/create). Упоминание останется в тексте, но в участники треда человек не попадёт. Полезно, когда бот ссылается на сотрудника для контекста, не втягивая его в обсуждение. -Удаление участника и выход из треда работают так же, как для обычных чатов: методы [Удаление участника из чата](DELETE /chats/{id}/members/{user_id}) и [Выход из чата](DELETE /chats/{id}/leave) с `chat_id` треда. +Удаление участника и выход из треда работают так же, как для обычных чатов: методы [Удаление участника из чата](/api/members/remove) и [Выход из чата](/api/members/leave) с `chat_id` треда. ## Бот в треде diff --git a/apps/docs/public/guides/webhook/events.md b/apps/docs/public/guides/webhook/events.md index a94ef5ff0..645148a65 100644 --- a/apps/docs/public/guides/webhook/events.md +++ b/apps/docs/public/guides/webhook/events.md @@ -21,8 +21,8 @@ **Webhook URL** можно задать не только здесь, но и программно — это удобно для автоматизации (например, [n8n](/guides/n8n/trigger) регистрирует свой адрес сам): -- метод [Редактирование бота](PUT /bots/{id}) — токеном администратора (скоуп `bots:write` и доступ редактора к боту) можно прописать `URL` любому боту; -- метод [Саморегистрация вебхука бота](PUT /bot/webhook) — бот прописывает свой `URL` собственным токеном (скоуп `bot_self:webhook:write`), без участия администратора. +- метод [Редактирование бота](/api/bots/update) — токеном администратора (скоуп `bots:write` и доступ редактора к боту) можно прописать `URL` любому боту; +- метод [Саморегистрация вебхука бота](/api/bots/update-webhook) — бот прописывает свой `URL` собственным токеном (скоуп `bot_self:webhook:write`), без участия администратора. Чтобы отключить вебхук, передайте пустую строку в `outgoing_url`. @@ -56,14 +56,14 @@ - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `url: string` (required) — Прямая ссылка на сообщение. Пример: `"https://pachca.com/chats/1245817/messages/5678"` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012` -- `parent_message_id: integer, int32` — Идентификатор сообщения, к которому написан ответ. Пример: `3456` -- `thread: object` — Объект с параметрами треда +- `parent_message_id: integer, int32` (nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `3456` +- `thread: object` — Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение. - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит только основные поля сообщения: текст, автора, чат, ответ и тред. По payload нельзя определить, есть ли у сообщения вложение: у сообщения без текста (например, только с файлом) поле `content` придёт пустой строкой. Вложения, реакции, кнопки, информацию о пересланном сообщении и другие поля получите методом [Информация о сообщении](GET /messages/{id}) по полю `id`. Для события `delete` сообщение уже удалено, поэтому добрать его по `id` не получится. +> Payload содержит только основные поля сообщения: текст, автора, чат, ответ и тред. По payload нельзя определить, есть ли у сообщения вложение: у сообщения без текста (например, только с файлом) поле `content` придёт пустой строкой. Вложения, реакции, кнопки, информацию о пересланном сообщении и другие поля получите методом [Информация о сообщении](/api/messages/get) по полю `id`. Для события `delete` метод по-прежнему отвечает `200`, но возвращает уже очищенную запись: `content` пустой, вложения и реакции удалены, заполнено поле `deleted_at`. В списке сообщений такая запись не возвращается. ## Реакции @@ -76,21 +76,21 @@ Значения: `reaction` — Для реакций всегда reaction - `event: string` (required) — Тип события Значения: `new` — Создание, `delete` — Удаление -- `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.. Пример: `9012` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`. Пример: `9012` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817` - `code: string` (required) — Emoji символ реакции. Пример: `"👍"` - `name: string` (required) — Название реакции. Пример: `"thumbsup"` - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345` -- `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.. Пример: `"2025-05-15T14:30:00.000Z"` +- `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит все данные реакции. Если нужен контекст, получите сообщение методом [Информация о сообщении](GET /messages/{id}) по `message_id` или автора методом [Информация о сотруднике](GET /users/{id}) по `user_id`. +> Payload содержит все данные реакции. Если нужен контекст, получите сообщение методом [Информация о сообщении](/api/messages/get) по `message_id` или автора методом [Информация о сотруднике](/api/users/get) по `user_id`. ## Нажатие кнопок -Вебхук отправляется при нажатии `Data`-кнопки в сообщении от бота. После получения вы можете [отредактировать сообщение](PUT /messages/{id}) — например, изменить или удалить кнопки — или [отправить новое](POST /messages) как ответ пользователю. Подробнее — в разделе [Кнопки в сообщениях](/guides/buttons). +Вебхук отправляется при нажатии `Data`-кнопки в сообщении от бота. После получения вы можете [отредактировать сообщение](/api/messages/update) — например, изменить или удалить кнопки — или [отправить новое](/api/messages/create) как ответ пользователю. Подробнее — в разделе [Кнопки в сообщениях](/guides/buttons). #### ButtonWebhookPayload @@ -106,7 +106,7 @@ - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит данные нажатой кнопки. Полное сообщение получите методом [Информация о сообщении](GET /messages/{id}) по `message_id`. +> Payload содержит данные нажатой кнопки. Полное сообщение получите методом [Информация о сообщении](/api/messages/get) по `message_id`. ## Заполнение формы @@ -122,17 +122,17 @@ Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы -- `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` -- `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` -- `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` +- `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` +- `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` -- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные +- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` -> Payload содержит все заполненные поля формы в `data`, дополнительных запросов не требуется. При необходимости получите автора методом [Информация о сотруднике](GET /users/{id}) по `user_id`. +> Payload содержит все заполненные поля формы в `data`, дополнительных запросов не требуется. При необходимости получите автора методом [Информация о сотруднике](/api/users/get) по `user_id`. ## Изменение участников чатов @@ -146,13 +146,13 @@ - `event: string` (required) — Тип события Значения: `add` — Добавление, `remove` — Удаление - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012` -- `thread_id: integer, int32` — Идентификатор треда. Пример: `5678` +- `thread_id: integer, int32` (nullable) — Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. Пример: `5678` - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]` - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит только идентификаторы. Полные данные сотрудников получите методом [Информация о сотруднике](GET /users/{id}) по каждому `user_id`, а сам чат — методом [Информация о чате](GET /chats/{id}) по `chat_id`. +> Payload содержит только идентификаторы. Полные данные сотрудников получите методом [Информация о сотруднике](/api/users/get) по каждому `user_id`, а сам чат — методом [Информация о чате](/api/chats/get) по `chat_id`. ## Изменение участников пространства @@ -170,12 +170,12 @@ - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит только идентификаторы сотрудников. Полные данные получите методом [Информация о сотруднике](GET /users/{id}) по каждому `user_id`. +> Payload содержит только идентификаторы сотрудников. Полные данные получите методом [Информация о сотруднике](/api/users/get) по каждому `user_id`. ## Отправка ссылок -Вебхук отправляется при появлении ссылки на один из доменов, указанных в настройках Unfurl-бота. Для получения таких событий необходимо создать специального Unfurl-бота. После получения вы можете воспользоваться методом [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) и создать предпросмотр ссылки в сообщении. Подробнее — в разделе [Разворачивание ссылок](/guides/link-previews). +Вебхук отправляется при появлении ссылки на один из доменов, указанных в настройках Unfurl-бота. Для получения таких событий необходимо создать специального Unfurl-бота. После получения вы можете воспользоваться методом [Unfurl (разворачивание ссылок)](/api/messages/unfurl) и создать предпросмотр ссылки в сообщении. Подробнее — в разделе [Разворачивание ссылок](/guides/link-previews). #### LinkSharedWebhookPayload @@ -194,7 +194,7 @@ - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1726685594` -> Payload содержит обнаруженные ссылки. Полное сообщение получите методом [Информация о сообщении](GET /messages/{id}) по `message_id`. +> Payload содержит обнаруженные ссылки. Полное сообщение получите методом [Информация о сообщении](/api/messages/get) по `message_id`. ## Видеозвонки @@ -215,21 +215,21 @@ - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438` -- `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.. Пример: `"2025-05-15T14:30:00.000Z"` -- `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.. Пример: `"2025-05-15T14:45:00.000Z"` -- `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.. Пример: `900` +- `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished. Пример: `"2025-05-15T14:30:00.000Z"` +- `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished. Пример: `"2025-05-15T14:45:00.000Z"` +- `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи. Пример: `900` - `members: array of object` — Список участников звонка. Присутствует для события finished. - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345` - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.. Пример: `"2025-05-15T14:45:00.000Z"` -- `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready.. Пример: `4567` -- `file_id: integer, int32` — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.. Пример: `89012` -- `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready.. Пример: `"https://api.pachca.com/files/89012"` -- `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready.. Пример: `10485760` + - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка. Пример: `"2025-05-15T14:45:00.000Z"` +- `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready. Пример: `4567` +- `file_id: integer, int32` (nullable) — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан. Пример: `89012` +- `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready. Пример: `"https://api.pachca.com/files/89012"` +- `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready. Пример: `10485760` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Для события `finished` payload содержит список участников с временем подключения и выхода, для `recording_ready` — ссылку на файл записи, её размер и длительность. Полные данные участников получите методом [Информация о сотруднике](GET /users/{id}) по каждому `user_id`, а чат — методом [Информация о чате](GET /chats/{id}) по `chat_id`. +> Для события `finished` payload содержит список участников с временем подключения и выхода, для `recording_ready` — ссылку на файл записи, её размер и длительность. Полные данные участников получите методом [Информация о сотруднике](/api/users/get) по каждому `user_id`, а чат — методом [Информация о чате](/api/chats/get) по `chat_id`. diff --git a/apps/docs/public/guides/webhook/overview.md b/apps/docs/public/guides/webhook/overview.md index 75f2900de..6ac162d57 100644 --- a/apps/docs/public/guides/webhook/overview.md +++ b/apps/docs/public/guides/webhook/overview.md @@ -38,13 +38,13 @@ ## Настройка через API -Исходящий вебхук можно настроить программно, без интерфейса — методами [Новый бот](POST /bots) и [Редактирование бота](PUT /bots/{id}). В объекте `bot.webhook` передаются: +Исходящий вебхук можно настроить программно, без интерфейса — методами [Новый бот](/api/bots/create) и [Редактирование бота](/api/bots/update). В объекте `bot.webhook` передаются: - `outgoing_url` — URL, на который Пачка отправляет события - `events` — типы событий - `trigger_on` и `commands` — условие срабатывания и команды-триггеры -Бот может сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](PUT /bot/webhook), без участия администратора. +Бот может сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](/api/bots/update-webhook), без участия администратора. ## Разделы diff --git a/apps/docs/public/guides/webhook/polling.md b/apps/docs/public/guides/webhook/polling.md index 476892077..c555d3ac6 100644 --- a/apps/docs/public/guides/webhook/polling.md +++ b/apps/docs/public/guides/webhook/polling.md @@ -7,7 +7,7 @@ Если у вас нет возможности принимать входящие HTTP-запросы (локальная разработка, жёсткие firewall-правила), используйте **поллинг** — получение событий через API или готовые helpers в SDK. -Включите настройку **Сохранять историю событий** на вкладке **Исходящий Webhook** в настройках бота (подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroiki)), чтобы получать события через метод [История событий](GET /webhooks/events). +Включите настройку **Сохранять историю событий** на вкладке **Исходящий Webhook** в настройках бота (подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroyki)), чтобы получать события через метод [История событий](/api/bots/list-events). > SDK helpers по умолчанию начинают читать только события, созданные после запуска воркера, и дедуплицируют уже обработанные delivery ID в памяти. @@ -173,7 +173,7 @@ await foreach (var payload in client.Bots.PollWebhookPayloadsAsync **API** (доступно администраторам) -- **Токен бота** — создайте бота в **Автоматизации** > **Интеграции** > **Чат-боты и Вебхуки** или программно методом [Новый бот](POST /bots) +- **Токен бота** — создайте бота в **Автоматизации** > **Интеграции** > **Чат-боты и Вебхуки** или программно методом [Новый бот](/api/bots/create) > Подробнее о типах токенов и скоупах — в разделе [Авторизация](/api/authorization). ### Шаг 2. Проверьте токен -Получим информацию о своем профиле — простейший запрос [Свой профиль](GET /profile) без параметров: +Получим информацию о своем профиле — простейший запрос [Свой профиль](/api/profile/get) без параметров: **Получение профиля** @@ -1029,7 +1029,7 @@ curl "https://api.pachca.com/api/shared/v1/profile" \ ### Шаг 3. Создайте чат -Теперь создадим закрытый канал. Все параметры — в описании метода [Новый чат](POST /chats). +Теперь создадим закрытый канал. Все параметры — в описании метода [Новый чат](/api/chats/create). **Создание чата** @@ -1054,7 +1054,7 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ ``` -Укажите название чата и список участников. Идентификаторы сотрудников можно получить через метод [Список сотрудников](GET /users), а идентификаторы тегов — через метод [Список тегов](GET /group_tags). Запросы с телом отправляются в формате JSON с заголовком `Content-Type: application/json`. +Укажите название чата и список участников. Идентификаторы сотрудников можно получить через метод [Список сотрудников](/api/users/list), а идентификаторы тегов — через метод [Список тегов](/api/group-tags/list). Запросы с телом отправляются в формате JSON с заголовком `Content-Type: application/json`. ## Выберите путь работы с API @@ -1235,28 +1235,28 @@ npx skills add pachca/openapi Агент читает историю сообщений и информацию о чате, чтобы понять контекст запроса. Если бота вызвали в треде и других сообщений нет — основной контекст в родительском сообщении. У самостоятельного треда родительского сообщения нет (`message_id` возвращается как `null`) — контекст только в сообщениях самого треда. -- [Список сообщений чата](GET /messages) — история сообщений треда или чата -- [Информация о сообщении](GET /messages/{id}) — родительское сообщение треда -- [Информация о чате](GET /chats/{id}) — участники и тема чата +- [Список сообщений чата](/api/messages/list) — история сообщений треда или чата +- [Информация о сообщении](/api/messages/get) — родительское сообщение треда +- [Информация о чате](/api/chats/get) — участники и тема чата ### Шаг 3. Выполнение действий Агент выполняет нужные действия — отправляет сообщения, создаёт задачи, вызывает внешние сервисы. Реакция-индикатор показывает пользователю, что агент работает. -- [Новое сообщение](POST /messages) — отправить сообщение в канал или беседу -- [Новый тред](POST /messages/{id}/thread) — создать тред у сообщения и ответить -- [Новый самостоятельный тред](POST /threads) — создать тред для диалога без привязки к сообщению -- [Новое напоминание](POST /tasks) — создать задачу из контекста разговора -- [Новая реакция](POST /messages/{id}/reactions) — поставить реакцию-индикатор +- [Новое сообщение](/api/messages/create) — отправить сообщение в канал или беседу +- [Новый тред](/api/threads/add) — создать тред у сообщения и ответить +- [Новый самостоятельный тред](/api/threads/create) — создать тред для диалога без привязки к сообщению +- [Новое напоминание](/api/tasks/create) — создать задачу из контекста разговора +- [Новая реакция](/api/reactions/add) — поставить реакцию-индикатор ### Шаг 4. Ответ Результат агент отправляет обратно в тред или в личные сообщения и снимает реакцию-индикатор. -- [Новое сообщение](POST /messages) — отправить результат -- [Удаление реакции](DELETE /messages/{id}/reactions) — снять реакцию-индикатор +- [Новое сообщение](/api/messages/create) — отправить результат +- [Удаление реакции](/api/reactions/remove) — снять реакцию-индикатор Полный формат событий и payload — в [гайде по исходящим вебхукам](/guides/webhook/overview). @@ -1270,7 +1270,7 @@ npx skills add pachca/openapi ## Реакция agent-thinking -Создайте [кастомную реакцию](https://pachca.com/help-center/features/kastomnye-reakcii) с именем `agent-thinking` и загрузите анимированную иконку. Когда агент ставит эту реакцию на сообщение, интерфейс Пачки автоматически показывает живой таймер вместо счётчика — пользователь видит, сколько секунд агент уже работает. Таймер отображается до 5 минут. При [добавлении реакции](POST /messages/{id}/reactions) передайте параметр `name` со значением `agent-thinking`. +Создайте [кастомную реакцию](https://pachca.com/help-center/features/kastomnye-reakcii) с именем `agent-thinking` и загрузите анимированную иконку. Когда агент ставит эту реакцию на сообщение, интерфейс Пачки автоматически показывает живой таймер вместо счётчика — пользователь видит, сколько секунд агент уже работает. Таймер отображается до 5 минут. При [добавлении реакции](/api/reactions/add) передайте параметр `name` со значением `agent-thinking`. ![Реакция agent-thinking с таймером](/images/agent-thinking.gif) @@ -1297,7 +1297,7 @@ npx skills add pachca/openapi Текст сообщений — Markdown. Жирный, курсив, зачёркивание, ссылки, упоминания, инлайн-код и блоки кода работают сразу — агенту достаточно прислать обычный Markdown в тексте сообщения. Списки, цитаты и заголовки в тексте сообщения не распознаются и остаются обычным текстом, для них прикрепляйте `.md`-файл (см. ниже). Полный список поддерживаемых конструкций — в разделе [Форматирование текста](/guides/markdown). -Разметка передаётся в поле `content` метода [Новое сообщение](POST /messages) как есть — отдельный флаг включать не нужно, текст всегда интерпретируется как Markdown. Те же правила действуют при [редактировании сообщения](PUT /messages/{id}). +Разметка передаётся в поле `content` метода [Новое сообщение](/api/messages/create) как есть — отдельный флаг включать не нужно, текст всегда интерпретируется как Markdown. Те же правила действуют при [редактировании сообщения](/api/messages/update). ![Сообщение с Markdown и приложенным .md-файлом](/images/markdown-message.webp) @@ -1316,7 +1316,7 @@ npx skills add pachca/openapi Всё, что присылает бот, рендерится так же, как контент от людей. Специального режима для агентов не требуется. -Загрузите `.md` по схеме [Загрузка файлов](/api/file-uploads) (три шага через presigned S3), затем передайте полученный ключ файла в поле `files` при вызове [Новое сообщение](POST /messages). Расширение `.md` в имени файла включает рендер карточкой автоматически. +Загрузите `.md` по схеме [Загрузка файлов](/api/file-uploads) (три шага через presigned S3), затем передайте полученный ключ файла в поле `files` при вызове [Новое сообщение](/api/messages/create). Расширение `.md` в имени файла включает рендер карточкой автоматически. ![Файл .md, отрендеренный карточкой в Пачке](/images/markdown-render.webp) @@ -1383,7 +1383,7 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \ ### Самостоятельный тред -Самостоятельный тред не привязан к сообщению — его создают методом [Новый самостоятельный тред](POST /threads). Тело запроса не требуется, создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`. Метод требует скоуп `threads:create`. +Самостоятельный тред не привязан к сообщению — его создают методом [Новый самостоятельный тред](/api/threads/create). Тело запроса не требуется, создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`. Метод требует скоуп `threads:create`. **Создание самостоятельного треда** @@ -1398,7 +1398,7 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ ### Комментарии в тред -Комментарий в тред — это обычное сообщение через [Новое сообщение](POST /messages). Есть два равнозначных способа адресации. +Комментарий в тред — это обычное сообщение через [Новое сообщение](/api/messages/create). Есть два равнозначных способа адресации. **Способ 1: через идентификатор треда** — `entity_type: "thread"` и `entity_id` равным `thread.id`. @@ -1419,7 +1419,7 @@ pachca messages create \ --token YOUR_ACCESS_TOKEN ``` -Чтобы получить все комментарии треда — вызовите [Список сообщений чата](GET /messages) с `chat_id` равным `thread.chat_id`. +Чтобы получить все комментарии треда — вызовите [Список сообщений чата](/api/messages/list) с `chat_id` равным `thread.chat_id`. ## Структура треда @@ -1427,9 +1427,9 @@ pachca messages create \ | Поле | Что обозначает | Когда нужно | |------|----------------|-------------| -| `id` | Идентификатор треда как сущности | В методе [Информация о треде](GET /threads/{id}) | -| `chat_id` | Идентификатор **чата треда** — отдельного чата, в котором хранятся комментарии треда | Для отправки комментария [Новое сообщение](POST /messages) и для чтения [Список сообщений чата](GET /messages) | -| `message_id` | Идентификатор родительского сообщения, к которому привязан тред. `null` у самостоятельного треда | При создании треда у сообщения — в методе [Создание треда](POST /messages/{id}/thread) | +| `id` | Идентификатор треда как сущности | В методе [Информация о треде](/api/threads/get) | +| `chat_id` | Идентификатор **чата треда** — отдельного чата, в котором хранятся комментарии треда | Для отправки комментария [Новое сообщение](/api/messages/create) и для чтения [Список сообщений чата](/api/messages/list) | +| `message_id` | Идентификатор родительского сообщения, к которому привязан тред. `null` у самостоятельного треда | При создании треда у сообщения — в методе [Создание треда](/api/threads/add) | | `message_chat_id` | Идентификатор чата, в котором находится родительское сообщение. `null` у самостоятельного треда | Для проверки контекста | Когда вы получаете обычное сообщение через API, в поле `thread` будет короткий объект `{ id, chat_id }`, если у этого сообщения **есть тред** (то есть сообщение — родительское для треда). Если сообщение само живёт **внутри треда** (это комментарий), у него будет: @@ -1440,7 +1440,7 @@ pachca messages create \ ## Список доступных тредов -Метод [Список тредов](GET /threads) возвращает все доступные вам треды: +Метод [Список тредов](/api/threads/list) возвращает все доступные вам треды: - **Треды, в которых вы состоите напрямую** — вас явно добавили в сам тред (в том числе через сквозной тред, без участия в родительском чате), а также самостоятельные треды, которые вы создали. - **Все треды чатов, в которых вы состоите** — даже если в самом треде вы не участвуете. Например, если вы участник канала «Маркетинг», в выдачу попадут все треды этого канала, в том числе те, в которые вы лично не писали. @@ -1452,17 +1452,17 @@ pachca messages create \ ## Участники треда -У треда, как у самостоятельного чата, есть свой список участников, отдельный от родительского чата. Получить его можно методом [Список участников чата](GET /chats/{id}/members) с `chat_id` треда. +У треда, как у самостоятельного чата, есть свой список участников, отдельный от родительского чата. Получить его можно методом [Список участников чата](/api/members/list) с `chat_id` треда. Добавить участника в тред можно двумя способами: -- **Через API** — метод [Добавление участников](POST /chats/{id}/members), передав `chat_id` **треда** (не родительского чата). Если добавляемый сотрудник не состоит в родительском чате, он станет участником сквозного треда: будет видеть тред и родительское сообщение, но не остальную историю. +- **Через API** — метод [Добавление участников](/api/members/add), передав `chat_id` **треда** (не родительского чата). Если добавляемый сотрудник не состоит в родительском чате, он станет участником сквозного треда: будет видеть тред и родительское сообщение, но не остальную историю. - **Через упоминание `@nickname`** в комментарии треда — добавляется автоматически. Для ботов работает только если бот настроен как **публичный** (см. [Доступы бота](/guides/bots/access#tredy)). -> Если нужно упомянуть участника в треде, но **не** добавлять его автоматически — передайте `skip_invite_mentions: true` в теле метода [Новое сообщение](POST /messages). Упоминание останется в тексте, но в участники треда человек не попадёт. Полезно, когда бот ссылается на сотрудника для контекста, не втягивая его в обсуждение. +> Если нужно упомянуть участника в треде, но **не** добавлять его автоматически — передайте `skip_invite_mentions: true` в теле метода [Новое сообщение](/api/messages/create). Упоминание останется в тексте, но в участники треда человек не попадёт. Полезно, когда бот ссылается на сотрудника для контекста, не втягивая его в обсуждение. -Удаление участника и выход из треда работают так же, как для обычных чатов: методы [Удаление участника из чата](DELETE /chats/{id}/members/{user_id}) и [Выход из чата](DELETE /chats/{id}/leave) с `chat_id` треда. +Удаление участника и выход из треда работают так же, как для обычных чатов: методы [Удаление участника из чата](/api/members/remove) и [Выход из чата](/api/members/leave) с `chat_id` треда. ## Бот в треде @@ -1530,11 +1530,11 @@ pachca messages create \ *Сообщение от бота с подменой имени и аватара* -Метод [Новое сообщение](POST /messages) поддерживает поля `display_name` и `display_avatar_url`, позволяющие указать произвольное имя и аватар отправителя для конкретного сообщения. Бейдж **Бот** при этом сохраняется, а при открытии профиля отправителя пользователь увидит оригинальное имя и аватар бота. +Метод [Новое сообщение](/api/messages/create) поддерживает поля `display_name` и `display_avatar_url`, позволяющие указать произвольное имя и аватар отправителя для конкретного сообщения. Бейдж **Бот** при этом сохраняется, а при открытии профиля отправителя пользователь увидит оригинальное имя и аватар бота. Это полезно для миграции сообщений из другого сервиса: бот отправляет сообщения от своего имени, но каждое сообщение отображается с именем и аватаром реального автора из исходной системы. -> Поля `display_name` и `display_avatar_url` доступны только при использовании токена бота. Метод [Редактирование сообщения](PUT /messages/{id}) также поддерживает эти поля. +> Поля `display_name` и `display_avatar_url` доступны только при использовании токена бота. Метод [Редактирование сообщения](/api/messages/update) также поддерживает эти поля. @@ -1555,7 +1555,7 @@ pachca messages create \ Бота можно создать двумя способами: - **Через интерфейс** — отдельные настройки (тип бота, аватар) и наглядная пошаговая форма. Подходит для разовой ручной настройки. -- **Через API** ([Новый бот](POST /bots)) — программно, без интерфейса. Подходит для автоматизации: завести бота из своего сервиса или скрипта и сразу получить `access_token`. +- **Через API** ([Новый бот](/api/bots/create)) — программно, без интерфейса. Подходит для автоматизации: завести бота из своего сервиса или скрипта и сразу получить `access_token`. ## Создание бота через интерфейс @@ -1583,7 +1583,7 @@ pachca messages create \ ### Шаг 2. Скопируйте токен -После создания бота перейдите на вкладку **API** и скопируйте `access_token` — он потребуется для работы с API от имени бота. Токен не имеет срока жизни. Там же доступен `user_id` бота — используется, например, для [добавления бота в чат](POST /chats/{id}/members). +После создания бота перейдите на вкладку **API** и скопируйте `access_token` — он потребуется для работы с API от имени бота. Токен не имеет срока жизни. Там же доступен `user_id` бота — используется, например, для [добавления бота в чат](/api/members/add). ### Шаг 3. Измените название и аватар (опционально) @@ -1598,7 +1598,7 @@ pachca messages create \ ## Создание бота через API -Бота можно создать программно методом [Новый бот](POST /bots) — без интерфейса. Это удобно, когда нужно завести бота из своего сервиса или скрипта. +Бота можно создать программно методом [Новый бот](/api/bots/create) — без интерфейса. Это удобно, когда нужно завести бота из своего сервиса или скрипта. ### Шаг 1. Отправьте запрос на создание @@ -1613,13 +1613,13 @@ pachca messages create \ В ответе вы получите `access_token` бота — сразу сохраните его. Повторно получить токен вы сможете только через интерфейс (вкладка **API** настроек бота), там же его можно перевыпустить. Вместе с токеном придёт `id` бота (его `user_id`). -Получить параметры существующего бота можно методом [Информация о боте](GET /bots/{id}), а изменить — методом [Редактирование бота](PUT /bots/{id}). Бот может и сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](PUT /bot/webhook), без участия администратора. +Получить параметры существующего бота можно методом [Информация о боте](/api/bots/get), а изменить — методом [Редактирование бота](/api/bots/update). Бот может и сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](/api/bots/update-webhook), без участия администратора. ## Профиль бота Бот, как и любой участник пространства, имеет свой профиль. В нём отображаются имя, аватар, никнейм, статус и список общих чатов с ботом. Профиль бота можно редактировать — изменить имя, никнейм и другие поля. -**Никнейм** — уникальный идентификатор бота для упоминания через `@`. Именно по никнейму сотрудники могут упоминать бота в сообщениях и добавлять его в [сквозные треды](/guides/bots/access#tredy). Никнейм и другие поля профиля можно изменить через интерфейс или через API — метод [Редактирование сотрудника](PUT /users/{id}). +**Никнейм** — уникальный идентификатор бота для упоминания через `@`. Именно по никнейму сотрудники могут упоминать бота в сообщениях и добавлять его в [сквозные треды](/guides/bots/access#tredy). Никнейм и другие поля профиля можно изменить через интерфейс или через API — метод [Редактирование сотрудника](/api/users/update). ## Настройка доступов @@ -1649,7 +1649,7 @@ pachca messages create \ ### Настройка через API -Эти доступы можно задать не только в интерфейсе, но и через API — методом [Редактирование бота](PUT /bots/{id}) или сразу при создании: +Эти доступы можно задать не только в интерфейсе, но и через API — методом [Редактирование бота](/api/bots/update) или сразу при создании: - **Кто может редактировать настройки бота** — поле `can_edit` (роли `admin` и `chat_owners`). Создатель имеет доступ всегда, поэтому в поле перечисляются только дополнительные роли, а пустой массив означает «только создатель» - **Кто может добавлять бота в чаты** — поле `who_can_add` (`creator`, `creator_admin`, `creator_admin_user`, `anyone`) @@ -1696,14 +1696,14 @@ pachca messages create \ Добавить бота в чат можно двумя способами: - Через интерфейс — в диалоге **Добавление участников** на вкладке **Интеграции**. Список доступных ботов зависит от настройки [Кто может добавлять бота в чаты](/guides/bots/setup#kto-mozhet-dobavlyat-bota-v-chaty). -- Через API — метод [Добавление участника в чат](POST /chats/{id}/members), передав `user_id` бота в `member_ids`. +- Через API — метод [Добавление участника в чат](/api/members/add), передав `user_id` бота в `member_ids`. ## Треды Бота можно добавить напрямую в тред — без добавления в родительский чат. Это возможно благодаря [сквозным тредам](/guides/threads#skvoznye-tredy) Пачки: участник треда видит только сам тред и родительское сообщение, но не историю чата. Добавить бота в тред можно двумя способами: -- Через API — метод [Добавление участника в чат](POST /chats/{id}/members), передав `chat_id` треда. +- Через API — метод [Добавление участника в чат](/api/members/add), передав `chat_id` треда. - Через упоминание `@никнейм_бота` в сообщении — доступно, когда бот настроен как **публичный**. ## Личные сообщения @@ -1711,7 +1711,7 @@ pachca messages create \ Пользователь может писать боту личные сообщения и взаимодействовать с ним 1 на 1 в двух случаях: - Бот настроен как **публичный** — любой участник пространства может начать диалог. -- Бот сам ранее [отправил сообщение](POST /messages) пользователю через API (с `entity_type: "user"`) — после этого пользователь может отвечать, даже если бот не публичный. +- Бот сам ранее [отправил сообщение](/api/messages/create) пользователю через API (с `entity_type: "user"`) — после этого пользователь может отвечать, даже если бот не публичный. При этом бота нельзя добавить в существующие личные сообщения между двумя участниками пространства. @@ -1733,7 +1733,7 @@ pachca messages create \ Поиск из общей строки поиска и при создании личных сообщений ведёт себя по-разному в зависимости от роли: - **Сотрудники и администраторы** — видят и обычных пользователей, и публичных ботов в пространстве. -- **Гости и мульти-гости** — видят **только тех, с кем уже есть личные сообщения**. Бот появится в выдаче только если с ним уже была переписка — например, потому что бот сам ранее [отправил сообщение](POST /messages) пользователю. +- **Гости и мульти-гости** — видят **только тех, с кем уже есть личные сообщения**. Бот появится в выдаче только если с ним уже была переписка — например, потому что бот сам ранее [отправил сообщение](/api/messages/create) пользователю. ### Список добавления участников в чат @@ -1819,7 +1819,7 @@ pachca messages create \ ### Шаг 4. Добавьте бота в нужные чаты -Сообщения от вебхука публикуются во все групповые чаты, где состоит бот. Добавьте бота в чаты, в которые хотите получать уведомления — через настройки чата или через API-метод [Добавление пользователей](POST /chats/{id}/members). +Сообщения от вебхука публикуются во все групповые чаты, где состоит бот. Добавьте бота в чаты, в которые хотите получать уведомления — через настройки чата или через API-метод [Добавление пользователей](/api/members/add). ### Шаг 5. Сервис отправляет POST-запрос @@ -1912,23 +1912,23 @@ Liquid также поддерживает: ## Настройка через API -Все эти настройки можно задать программно, без интерфейса — методами [Новый бот](POST /bots) и [Редактирование бота](PUT /bots/{id}): +Все эти настройки можно задать программно, без интерфейса — методами [Новый бот](/api/bots/create) и [Редактирование бота](/api/bots/update): - `template` — шаблон сообщения - `template_engine` — шаблонизатор (`liquid` или `mustache`) - `challenge_key` — поле для верификации - `link_preview_enabled` — показывать превью ссылок -Текущие значения возвращаются в объекте бота и доступны через метод [Информация о боте](GET /bots/{id}). +Текущие значения возвращаются в объекте бота и доступны через метод [Информация о боте](/api/bots/get). ## Ограничения > **Внимание:** Входящий вебхук не позволяет отправить личное сообщение или указать конкретный чат. Сообщение публикуется во **все групповые чаты**, где состоит бот. Для отправки в конкретный чат или личное сообщение - используйте API-метод [Новое сообщение](POST /messages). + используйте API-метод [Новое сообщение](/api/messages/create). -- **Максимальная длина сообщения** — 40 000 символов. Если результат шаблона превышает этот лимит, сообщение не будет отправлено. +- **Максимальная длина сообщения** — 40 000 байт. Для кириллицы это около 20 000 символов, поскольку каждый символ занимает два байта. Если результат шаблона превышает лимит, сообщение не будет отправлено. - **Пустое сообщение** — если шаблон возвращает пустую строку, сообщение не будет отправлено. - **Ошибка в шаблоне** — если шаблон содержит синтаксическую ошибку, в чат будет отправлено сообщение вида `Ошибка в шаблоне: описание ошибки`. @@ -1981,13 +1981,13 @@ Liquid также поддерживает: ## Настройка через API -Исходящий вебхук можно настроить программно, без интерфейса — методами [Новый бот](POST /bots) и [Редактирование бота](PUT /bots/{id}). В объекте `bot.webhook` передаются: +Исходящий вебхук можно настроить программно, без интерфейса — методами [Новый бот](/api/bots/create) и [Редактирование бота](/api/bots/update). В объекте `bot.webhook` передаются: - `outgoing_url` — URL, на который Пачка отправляет события - `events` — типы событий - `trigger_on` и `commands` — условие срабатывания и команды-триггеры -Бот может сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](PUT /bot/webhook), без участия администратора. +Бот может сам прописать `URL` своего исходящего вебхука собственным токеном — методом [Саморегистрация вебхука бота](/api/bots/update-webhook), без участия администратора. ## Разделы @@ -2019,8 +2019,8 @@ Liquid также поддерживает: **Webhook URL** можно задать не только здесь, но и программно — это удобно для автоматизации (например, [n8n](/guides/n8n/trigger) регистрирует свой адрес сам): -- метод [Редактирование бота](PUT /bots/{id}) — токеном администратора (скоуп `bots:write` и доступ редактора к боту) можно прописать `URL` любому боту; -- метод [Саморегистрация вебхука бота](PUT /bot/webhook) — бот прописывает свой `URL` собственным токеном (скоуп `bot_self:webhook:write`), без участия администратора. +- метод [Редактирование бота](/api/bots/update) — токеном администратора (скоуп `bots:write` и доступ редактора к боту) можно прописать `URL` любому боту; +- метод [Саморегистрация вебхука бота](/api/bots/update-webhook) — бот прописывает свой `URL` собственным токеном (скоуп `bot_self:webhook:write`), без участия администратора. Чтобы отключить вебхук, передайте пустую строку в `outgoing_url`. @@ -2054,14 +2054,14 @@ Liquid также поддерживает: - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `url: string` (required) — Прямая ссылка на сообщение. Пример: `"https://pachca.com/chats/1245817/messages/5678"` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012` -- `parent_message_id: integer, int32` — Идентификатор сообщения, к которому написан ответ. Пример: `3456` -- `thread: object` — Объект с параметрами треда +- `parent_message_id: integer, int32` (nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `3456` +- `thread: object` — Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение. - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит только основные поля сообщения: текст, автора, чат, ответ и тред. По payload нельзя определить, есть ли у сообщения вложение: у сообщения без текста (например, только с файлом) поле `content` придёт пустой строкой. Вложения, реакции, кнопки, информацию о пересланном сообщении и другие поля получите методом [Информация о сообщении](GET /messages/{id}) по полю `id`. Для события `delete` сообщение уже удалено, поэтому добрать его по `id` не получится. +> Payload содержит только основные поля сообщения: текст, автора, чат, ответ и тред. По payload нельзя определить, есть ли у сообщения вложение: у сообщения без текста (например, только с файлом) поле `content` придёт пустой строкой. Вложения, реакции, кнопки, информацию о пересланном сообщении и другие поля получите методом [Информация о сообщении](/api/messages/get) по полю `id`. Для события `delete` метод по-прежнему отвечает `200`, но возвращает уже очищенную запись: `content` пустой, вложения и реакции удалены, заполнено поле `deleted_at`. В списке сообщений такая запись не возвращается. ## Реакции @@ -2074,21 +2074,21 @@ Liquid также поддерживает: Значения: `reaction` — Для реакций всегда reaction - `event: string` (required) — Тип события Значения: `new` — Создание, `delete` — Удаление -- `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.. Пример: `9012` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`. Пример: `9012` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817` - `code: string` (required) — Emoji символ реакции. Пример: `"👍"` - `name: string` (required) — Название реакции. Пример: `"thumbsup"` - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345` -- `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.. Пример: `"2025-05-15T14:30:00.000Z"` +- `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит все данные реакции. Если нужен контекст, получите сообщение методом [Информация о сообщении](GET /messages/{id}) по `message_id` или автора методом [Информация о сотруднике](GET /users/{id}) по `user_id`. +> Payload содержит все данные реакции. Если нужен контекст, получите сообщение методом [Информация о сообщении](/api/messages/get) по `message_id` или автора методом [Информация о сотруднике](/api/users/get) по `user_id`. ## Нажатие кнопок -Вебхук отправляется при нажатии `Data`-кнопки в сообщении от бота. После получения вы можете [отредактировать сообщение](PUT /messages/{id}) — например, изменить или удалить кнопки — или [отправить новое](POST /messages) как ответ пользователю. Подробнее — в разделе [Кнопки в сообщениях](/guides/buttons). +Вебхук отправляется при нажатии `Data`-кнопки в сообщении от бота. После получения вы можете [отредактировать сообщение](/api/messages/update) — например, изменить или удалить кнопки — или [отправить новое](/api/messages/create) как ответ пользователю. Подробнее — в разделе [Кнопки в сообщениях](/guides/buttons). #### ButtonWebhookPayload @@ -2104,7 +2104,7 @@ Liquid также поддерживает: - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит данные нажатой кнопки. Полное сообщение получите методом [Информация о сообщении](GET /messages/{id}) по `message_id`. +> Payload содержит данные нажатой кнопки. Полное сообщение получите методом [Информация о сообщении](/api/messages/get) по `message_id`. ## Заполнение формы @@ -2120,17 +2120,17 @@ Liquid также поддерживает: Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы -- `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` -- `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` -- `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` +- `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` +- `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` -- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные +- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` -> Payload содержит все заполненные поля формы в `data`, дополнительных запросов не требуется. При необходимости получите автора методом [Информация о сотруднике](GET /users/{id}) по `user_id`. +> Payload содержит все заполненные поля формы в `data`, дополнительных запросов не требуется. При необходимости получите автора методом [Информация о сотруднике](/api/users/get) по `user_id`. ## Изменение участников чатов @@ -2144,13 +2144,13 @@ Liquid также поддерживает: - `event: string` (required) — Тип события Значения: `add` — Добавление, `remove` — Удаление - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012` -- `thread_id: integer, int32` — Идентификатор треда. Пример: `5678` +- `thread_id: integer, int32` (nullable) — Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. Пример: `5678` - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]` - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит только идентификаторы. Полные данные сотрудников получите методом [Информация о сотруднике](GET /users/{id}) по каждому `user_id`, а сам чат — методом [Информация о чате](GET /chats/{id}) по `chat_id`. +> Payload содержит только идентификаторы. Полные данные сотрудников получите методом [Информация о сотруднике](/api/users/get) по каждому `user_id`, а сам чат — методом [Информация о чате](/api/chats/get) по `chat_id`. ## Изменение участников пространства @@ -2168,12 +2168,12 @@ Liquid также поддерживает: - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Payload содержит только идентификаторы сотрудников. Полные данные получите методом [Информация о сотруднике](GET /users/{id}) по каждому `user_id`. +> Payload содержит только идентификаторы сотрудников. Полные данные получите методом [Информация о сотруднике](/api/users/get) по каждому `user_id`. ## Отправка ссылок -Вебхук отправляется при появлении ссылки на один из доменов, указанных в настройках Unfurl-бота. Для получения таких событий необходимо создать специального Unfurl-бота. После получения вы можете воспользоваться методом [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) и создать предпросмотр ссылки в сообщении. Подробнее — в разделе [Разворачивание ссылок](/guides/link-previews). +Вебхук отправляется при появлении ссылки на один из доменов, указанных в настройках Unfurl-бота. Для получения таких событий необходимо создать специального Unfurl-бота. После получения вы можете воспользоваться методом [Unfurl (разворачивание ссылок)](/api/messages/unfurl) и создать предпросмотр ссылки в сообщении. Подробнее — в разделе [Разворачивание ссылок](/guides/link-previews). #### LinkSharedWebhookPayload @@ -2192,7 +2192,7 @@ Liquid также поддерживает: - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1726685594` -> Payload содержит обнаруженные ссылки. Полное сообщение получите методом [Информация о сообщении](GET /messages/{id}) по `message_id`. +> Payload содержит обнаруженные ссылки. Полное сообщение получите методом [Информация о сообщении](/api/messages/get) по `message_id`. ## Видеозвонки @@ -2213,21 +2213,21 @@ Liquid также поддерживает: - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438` -- `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.. Пример: `"2025-05-15T14:30:00.000Z"` -- `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.. Пример: `"2025-05-15T14:45:00.000Z"` -- `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.. Пример: `900` +- `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished. Пример: `"2025-05-15T14:30:00.000Z"` +- `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished. Пример: `"2025-05-15T14:45:00.000Z"` +- `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи. Пример: `900` - `members: array of object` — Список участников звонка. Присутствует для события finished. - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345` - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.. Пример: `"2025-05-15T14:45:00.000Z"` -- `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready.. Пример: `4567` -- `file_id: integer, int32` — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.. Пример: `89012` -- `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready.. Пример: `"https://api.pachca.com/files/89012"` -- `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready.. Пример: `10485760` + - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка. Пример: `"2025-05-15T14:45:00.000Z"` +- `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready. Пример: `4567` +- `file_id: integer, int32` (nullable) — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан. Пример: `89012` +- `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready. Пример: `"https://api.pachca.com/files/89012"` +- `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready. Пример: `10485760` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` -> Для события `finished` payload содержит список участников с временем подключения и выхода, для `recording_ready` — ссылку на файл записи, её размер и длительность. Полные данные участников получите методом [Информация о сотруднике](GET /users/{id}) по каждому `user_id`, а чат — методом [Информация о чате](GET /chats/{id}) по `chat_id`. +> Для события `finished` payload содержит список участников с временем подключения и выхода, для `recording_ready` — ссылку на файл записи, её размер и длительность. Полные данные участников получите методом [Информация о сотруднике](/api/users/get) по каждому `user_id`, а чат — методом [Информация о чате](/api/chats/get) по `chat_id`. @@ -2437,7 +2437,7 @@ app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => { Если у вас нет возможности принимать входящие HTTP-запросы (локальная разработка, жёсткие firewall-правила), используйте **поллинг** — получение событий через API или готовые helpers в SDK. -Включите настройку **Сохранять историю событий** на вкладке **Исходящий Webhook** в настройках бота (подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroiki)), чтобы получать события через метод [История событий](GET /webhooks/events). +Включите настройку **Сохранять историю событий** на вкладке **Исходящий Webhook** в настройках бота (подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroyki)), чтобы получать события через метод [История событий](/api/bots/list-events). > SDK helpers по умолчанию начинают читать только события, созданные после запуска воркера, и дедуплицируют уже обработанные delivery ID в памяти. @@ -2603,7 +2603,7 @@ await foreach (var payload in client.Bots.PollWebhookPayloadsAsync Метод [Редактирование сообщения](PUT /messages/{id}) также поддерживает поле `buttons`. Для удаления всех кнопок передайте пустой массив `[]`. +> Метод [Редактирование сообщения](/api/messages/update) также поддерживает поле `buttons`. Для удаления всех кнопок передайте пустой массив `[]`. ## Обработка нажатий @@ -2750,17 +2750,19 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ После получения события вы можете: -- [Отредактировать сообщение](PUT /messages/{id}) — убрать кнопки, добавить новые или обновить текст -- [Отправить новое сообщение](POST /messages) — как ответ пользователю с результатом действия +- [Отредактировать сообщение](/api/messages/update) — убрать кнопки, добавить новые или обновить текст +- [Отправить новое сообщение](/api/messages/create) — как ответ пользователю с результатом действия - [Открыть модальную форму](/guides/forms/overview) — используя `trigger_id` из вебхука (действителен 3 секунды) ## Ограничения -- Максимальное количество кнопок в строке — 8 -- Максимальное число кнопок у сообщения — 100 +- Максимальное количество строк с кнопками — 32 - Максимальная длина `text` на кнопке — 255 символов - Максимальная длина `data` у кнопки — 255 символов +Количество кнопок внутри строки API не ограничивает, но в интерфейсе строка не +переносится: больше пяти-шести кнопок в ряд читаются плохо на узких экранах. + ## Связанные разделы @@ -2920,8 +2922,8 @@ sequenceDiagram - `placeholder: string` (max length: 150) — Подсказка внутри поля ввода, пока оно пустое. Пример: `"Куда собираетесь и что будете делать"` - `multiline: boolean` (default: false) — Многострочное поле. Пример: `true` - `initial_value: string` (max length: 3000) — Начальное значение в поле. Пример: `"Начальный текст"` -- `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.. Пример: `10` -- `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.. Пример: `500` +- `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку. Пример: `10` +- `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку. Пример: `500` - `required: boolean` (default: false) — Обязательность. Пример: `true` - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом. Пример: `"Возможно вам подскаджут, какие места лучше посетить"` @@ -2942,7 +2944,7 @@ sequenceDiagram - `options: array of object` (max items: 100) — Массив доступных пунктов в выпадающем списке - `text: string` (required, max length: 75) — Отображаемый текст. Пример: `"Ничего"` - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта. Пример: `"nothing"` - - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.. Пример: `true` + - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран. Пример: `true` - `required: boolean` (default: false) — Обязательность. Пример: `false` - `hint: string` (max length: 2000) — Подсказка, которая отображается под выпадающим списком серым цветом. Пример: `"Выберите одну из команд"` @@ -2964,7 +2966,7 @@ sequenceDiagram - `text: string` (required, max length: 75) — Отображаемый текст. Пример: `"Ничего"` - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта. Пример: `"nothing"` - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом. Пример: `"Каждый день бот будет присылать список новых задач в вашей команде"` - - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.. Пример: `true` + - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран. Пример: `true` - `required: boolean` (default: false) — Обязательность. Пример: `true` - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой радиокнопок серым цветом. Пример: `"Если вы не планируете выходить на связь, то выберите вариант Ничего"` @@ -3040,8 +3042,8 @@ sequenceDiagram Значения: `file_input` — Для загрузки файлов всегда file_input - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения. Пример: `"request_doc"` - `label: string` (required, max length: 150) — Подпись к полю. Пример: `"Заявление"` -- `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты.. Пример: `["pdf","jpg","png"]` -- `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле.. Пример: `1` +- `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты. Пример: `["pdf","jpg","png"]` +- `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле. Пример: `1` - `required: boolean` (default: false) — Обязательность. Пример: `true` - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом. Пример: `"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)"` @@ -3063,7 +3065,7 @@ sequenceDiagram Чтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший `trigger_id`. Это требование связано с тем, чтобы приложение открывало модальное окно только с разрешения пользователя и делало это быстро. -Для открытия представления используйте метод [Открытие представления](POST /views/open). +Для открытия представления используйте метод [Открытие представления](/api/views/open). > **Важно:** С целью поддержания интерактивности и отзывчивости интерфейсов Пачки, срок жизни `trigger_id` ограничен и составляет **3 секунды** @@ -3087,11 +3089,11 @@ sequenceDiagram Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы -- `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` -- `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` -- `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` +- `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` +- `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` -- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные +- `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` @@ -3101,8 +3103,8 @@ sequenceDiagram { "type": "view", "event": "submit", - "private_metadata": "{'timeoff_id':4378}", - "callback_id": "timeoff_reguest_form", + "private_metadata": "{\"timeoff_id\":4378}", + "callback_id": "timeoff_request_form", "user_id": 1235523, "data": { "date_start": "2025-07-01", @@ -3226,7 +3228,7 @@ Unfurling — это создание превью ссылки в сообще ### Шаг 5. Отправьте превью -Вызовите метод [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews), передав заголовок, описание и изображение для каждой ссылки. +Вызовите метод [Unfurl (разворачивание ссылок)](/api/messages/unfurl), передав заголовок, описание и изображение для каждой ссылки. ## Правила распознавания доменов @@ -3260,7 +3262,7 @@ Unfurling — это создание превью ссылки в сообще ## Создание превью -Для создания превью используйте метод [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews), передав `message_id` из вебхука. +Для создания превью используйте метод [Unfurl (разворачивание ссылок)](/api/messages/unfurl), передав `message_id` из вебхука. Тело запроса — объект `link_previews`, где каждый ключ — URL из массива `links` вебхука: @@ -3290,7 +3292,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ Изображение можно указать двумя способами: - **По ссылке** — параметр `image_url` с публичным URL изображения -- **Загрузкой файла** — параметр `image` с данными, полученными через метод [Загрузка файлов](POST /direct_url). Если указаны оба параметра, `image` является приоритетным +- **Загрузкой файла** — параметр `image` с данными, полученными через метод [Загрузка файлов](/api/files/direct-url). Если указаны оба параметра, `image` является приоритетным > **Внимание:** Если среди переданных URL будет ошибка (URL отсутствует в сообщении или домен не указан в настройках бота), запрос не будет выполнен — не будет создано ни одного превью. @@ -3340,7 +3342,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - максимальный количество запрашиваемых чатов (при указании): 50 - новый запрос на экспорта вы сможете сделать после завершения текущего -Для запроса экспорта используйте метод [Экспорт сообщений](POST /chats/exports). +Для запроса экспорта используйте метод [Экспорт сообщений](/api/chats/request-export). Экспорт выполняется асинхронно. На указанный `webhook_url` будет отправлен `JSON` с информацией о готовом экспорте. @@ -3358,7 +3360,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ Получив `JSON` с информацией о готовом экспорте, вам необходимо взять значение поля `export_id` и выполнить запрос на скачивание архива сообщений, указав его в `URL` запроса. -Для скачивания архива используйте метод [Скачать архив экспорта](GET /chats/exports/{id}). +Для скачивания архива используйте метод [Скачать архив экспорта](/api/chats/download-export). ### Шаг 3. Изучите структуру архива @@ -3387,9 +3389,9 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `id: integer` — Идентификатор сообщения. Пример: `12345` - `created_at: date-time` — Дата и время создания сообщения (ISO-8601, UTC+0). Пример: `"2024-01-15T10:30:00.000Z"` -- `deleted_at: date-time` — Дата и время удаления сообщения. Возвращается как null, если сообщение не удалено. +- `deleted_at: date-time` (nullable) — Дата и время удаления сообщения. Возвращается как null, если сообщение не удалено. - `content: string` — Текст сообщения. Пример: `"Привет! Как дела?"` -- `thread_id: integer` — Идентификатор треда сообщения. Возвращается как null, если у сообщения нет комментариев. +- `thread_id: integer` (nullable) — Идентификатор треда сообщения. Возвращается как null, если у сообщения нет комментариев. - `reactions: array of object` — Массив списка реакций - `user_id: integer` — Идентификатор пользователя, который добавил реакцию - `created_at: string` — Дата и время добавления реакции (ISO-8601, UTC+0) @@ -3416,7 +3418,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `email: string` — Электронная почта - `tags: array of string` — Массив тегов - `tags: array of string` — Массив тегов, привязанных к чату -- `thread: object` — Тред, в котором находится сообщение. Возвращается как null, если сообщение находится не в треде. +- `thread: object` (nullable) — Тред, в котором находится сообщение. Возвращается как null, если сообщение находится не в треде. - `id: integer` — Идентификатор треда - `message_id: integer` — Идентификатор сообщения, под которым был начат тред - `message_chat_id: string` — Идентификатор чата, в котором был начат тред @@ -3643,11 +3645,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `message_id: integer, int32` (required) — Идентификатор сообщения - `chat_id: integer, int32` (required) — Идентификатор чата - `user_id: integer, int32` (required) — Идентификатор пользователя -- `action_message: string` (required) — Описание действия. `null`, если у действия правила текст не задан. +- `action_message: string` (required, nullable) — Описание действия. `null`, если у действия правила текст не задан. - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали) -Получить такие события можно методом [Журнал аудита событий](GET /audit_events) с фильтром `event_key=dlp_violation_detected`. Подробнее — в [гайде по журналу аудита](/guides/audit-events). +Получить такие события можно методом [Журнал аудита событий](/api/security/list) с фильтром `event_key=dlp_violation_detected`. Подробнее — в [гайде по журналу аудита](/guides/audit-events). ## Связанные разделы @@ -3667,7 +3669,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ `Audit events API` Пачки предоставляет командам безопасности доступ к логам о критически важных событиях в мессенджере. Это позволяет обеспечивать надежный мониторинг и соответствовать требованиям информационной безопасности и регуляторов. -Для получения логов событий на основе указанных фильтров используйте метод [Журнал аудита событий](GET /audit_events). +Для получения логов событий на основе указанных фильтров используйте метод [Журнал аудита событий](/api/security/list). ## Реализованные типы событий @@ -3741,7 +3743,7 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T00 ## Где применяется -- **Сообщения** — поле `content` метода [Новое сообщение](POST /messages) и [Редактирование сообщения](PUT /messages/{id}) интерпретируется как markdown. Альтернатива — структурная пара `text` + `markup`, тогда markdown не разбирается. +- **Сообщения** — поле `content` метода [Новое сообщение](/api/messages/create) и [Редактирование сообщения](/api/messages/update) интерпретируется как markdown. Альтернатива — структурная пара `text` + `markup`, тогда markdown не разбирается. - **Входящие вебхуки** — текст, который шаблонизатор подставляет в сообщение, см. [Входящие вебхуки](/guides/incoming-webhooks). - **Блоки форм** — поле `text` блока `markdown`, см. [Блоки представления](/guides/forms/blocks). @@ -5269,6 +5271,13 @@ pachca commands --available ## Готовые SDK +- [TypeScript](/guides/sdk/typescript) npm · async/await · fetch +- [Python](/guides/sdk/python) PyPI · async/await · httpx +- [Go](/guides/sdk/go) go get · sync · net/http +- [Kotlin](/guides/sdk/kotlin) JitPack · coroutines · Ktor +- [Swift](/guides/sdk/swift) SPM · async throws · URLSession +- [C#](/guides/sdk/csharp) NuGet · async/await · HttpClient + Автоматически обновляются при каждом обновлении спецификации. [Исходный код на GitHub](https://github.com/pachca/openapi/tree/main/sdk). @@ -5377,7 +5386,7 @@ const client = new PachcaClient("YOUR_TOKEN") ```typescript // Получение профиля const response = client.profile.getProfile() -// → User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) +// → User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) ``` @@ -5726,7 +5735,7 @@ const request: MessageCreateRequest = { linkPreview: false } const response = client.messages.createMessage(request) -// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null }) +// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null }) // Список сотрудников const response = client.users.listUsers({ @@ -5750,7 +5759,7 @@ const request: TaskCreateRequest = { } } const response = client.tasks.createTask(request) -// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] }) +// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] }) ``` @@ -5800,7 +5809,7 @@ client = PachcaClient("YOUR_TOKEN") ```python # Получение профиля response = await client.profile.get_profile() -# → User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) +# → User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) ``` @@ -6167,7 +6176,7 @@ request = TaskCreateRequest( ) ) response = await client.tasks.create_task(request=request) -# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)]) +# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)]) ``` @@ -6219,7 +6228,7 @@ import pachca "github.com/pachca/openapi/sdk/go/generated" // Получение профиля response, err := client.Profile.GetProfile(ctx) -// → User{ID: int32, FirstName: string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string} +// → User{ID: int32, FirstName: *string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string} ``` @@ -6609,7 +6618,7 @@ request := TaskCreateRequest{ }, } response, err := client.Tasks.CreateTask(ctx, request) -// → Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}} +// → Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}} ``` @@ -6663,7 +6672,7 @@ val client = PachcaClient("YOUR_TOKEN") ```kotlin // Получение профиля val response = client.profile.getProfile() -// → User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?) +// → User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?) ``` @@ -7043,7 +7052,7 @@ val request = TaskCreateRequest( ) ) val response = client.tasks.createTask(request = request) -// → Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List) +// → Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List) ``` @@ -7101,7 +7110,7 @@ import PachcaSDK // Получение профиля let response = try await client.profile.getProfile() -// → User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?) +// → User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?) ``` @@ -7446,7 +7455,7 @@ let body = TaskCreateRequest( ) ) let response = try await client.tasks.createTask(body: body) -// → Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)]) +// → Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)]) ``` @@ -7498,7 +7507,7 @@ using Pachca.Sdk; // Получение профиля var response = await client.Profile.GetProfileAsync(); -// → User(Id: int, FirstName: string, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?) +// → User(Id: int, FirstName: string?, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?) ``` @@ -7910,7 +7919,7 @@ var request = new TaskCreateRequest } }; var response = await client.Tasks.CreateTaskAsync(request); -// → Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List) +// → Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List) ``` @@ -8005,6 +8014,10 @@ var response = await client.Tasks.CreateTaskAsync(request); # Начало работы +- [Pachca](https://n8n.io/integrations/pachca/) витрина · verified +- [Pachca Trigger](https://n8n.io/integrations/pachca-trigger/) витрина · verified +- [n8n-nodes-pachca](https://www.npmjs.com/package/n8n-nodes-pachca) npm + ## Где запустить n8n @@ -8152,7 +8165,7 @@ Credentials — данные для авторизации. Перейдите Доступные операции зависят от [скоупов](/api/authorization#skoupy) токена, а не от его типа. Подробнее — в разделе [Авторизация](/api/authorization). -После заполнения полей нажмите **Test** — n8n проверит подключение вызовом [Информация о токене](GET /oauth/token/info). При успехе вы увидите подтверждение. +После заполнения полей нажмите **Test** — n8n проверит подключение вызовом [Информация о токене](/api/oauth/token-info). При успехе вы увидите подтверждение. ![Успешная проверка Credentials](/images/n8n/credentials-test.avif) @@ -8280,14 +8293,14 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Новое сообщение](POST /messages) | -| Get Many | [Список сообщений чата](GET /messages) | -| Get | [Информация о сообщении](GET /messages/{id}) | -| Update | [Редактирование сообщения](PUT /messages/{id}) | -| Delete | [Удаление сообщения](DELETE /messages/{id}) | -| Pin | [Закрепление сообщения](POST /messages/{id}/pin) | -| Unpin | [Открепление сообщения](DELETE /messages/{id}/pin) | -| Unfurl | [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) | +| Create | [Новое сообщение](/api/messages/create) | +| Get Many | [Список сообщений чата](/api/messages/list) | +| Get | [Информация о сообщении](/api/messages/get) | +| Update | [Редактирование сообщения](/api/messages/update) | +| Delete | [Удаление сообщения](/api/messages/delete) | +| Pin | [Закрепление сообщения](/api/messages/pin) | +| Unpin | [Открепление сообщения](/api/messages/unpin) | +| Unfurl | [Unfurl (разворачивание ссылок)](/api/messages/unfurl) | **Ключевые параметры Create:** `entityId` (ID чата или пользователя), `content` (текст, Markdown), `entityType` (discussion, user, thread), `files`, `buttons`, `parentMessageId`. @@ -8306,14 +8319,14 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Новый чат](POST /chats) | -| Get Many | [Список чатов](GET /chats) | -| Get | [Информация о чате](GET /chats/{id}) | -| Update | [Редактирование чата](PUT /chats/{id}) | -| Archive | [Архивация чата](PUT /chats/{id}/archive) | -| Unarchive | [Разархивация чата](PUT /chats/{id}/unarchive) | -| Request Export | [Экспорт сообщений](POST /chats/exports) | -| Download Export | [Скачивание экспорта](GET /chats/exports/{id}) | +| Create | [Новый чат](/api/chats/create) | +| Get Many | [Список чатов](/api/chats/list) | +| Get | [Информация о чате](/api/chats/get) | +| Update | [Редактирование чата](/api/chats/update) | +| Archive | [Архивация чата](/api/chats/archive) | +| Unarchive | [Разархивация чата](/api/chats/unarchive) | +| Request Export | [Экспорт сообщений](/api/chats/request-export) | +| Download Export | [Скачивание экспорта](/api/chats/download-export) | **Сортировка в Get Many:** параметры `sort` (`id` или `last_message_at`) и `order` (`asc` / `desc`). Также доступны фильтры `availability`, `lastMessageAtAfter`, `lastMessageAtBefore`. @@ -8330,13 +8343,13 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Get Many | [Список участников чата](GET /chats/{id}/members) | -| Create | [Добавление пользователей](POST /chats/{id}/members) | -| Delete | [Исключение пользователя](DELETE /chats/{id}/members/{user_id}) | -| Update | [Редактирование роли](PUT /chats/{id}/members/{user_id}) | -| Leave | [Выход из беседы или канала](DELETE /chats/{id}/leave) | -| Add Group Tags | [Добавление тегов](POST /chats/{id}/group_tags) | -| Remove Group Tags | [Исключение тега](DELETE /chats/{id}/group_tags/{tag_id}) | +| Get Many | [Список участников чата](/api/members/list) | +| Create | [Добавление пользователей](/api/members/add) | +| Delete | [Исключение пользователя](/api/members/remove) | +| Update | [Редактирование роли](/api/members/update) | +| Leave | [Выход из беседы или канала](/api/members/leave) | +| Add Group Tags | [Добавление тегов](/api/members/add-group-tags) | +| Remove Group Tags | [Исключение тега](/api/members/remove-group-tag) | --- @@ -8346,16 +8359,16 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Новый сотрудник](POST /users) | -| Get Many | [Список сотрудников](GET /users) | -| Get | [Информация о сотруднике](GET /users/{id}) | -| Update | [Редактирование сотрудника](PUT /users/{id}) | -| Delete | [Удаление сотрудника](DELETE /users/{id}) | -| Update Avatar | [Загрузка аватара сотрудника](PUT /users/{user_id}/avatar) | -| Delete Avatar | [Удаление аватара сотрудника](DELETE /users/{user_id}/avatar) | -| Get Status | [Статус сотрудника](GET /users/{user_id}/status) | -| Update Status | [Новый статус сотрудника](PUT /users/{user_id}/status) | -| Delete Status | [Удаление статуса сотрудника](DELETE /users/{user_id}/status) | +| Create | [Новый сотрудник](/api/users/create) | +| Get Many | [Список сотрудников](/api/users/list) | +| Get | [Информация о сотруднике](/api/users/get) | +| Update | [Редактирование сотрудника](/api/users/update) | +| Delete | [Удаление сотрудника](/api/users/delete) | +| Update Avatar | [Загрузка аватара сотрудника](/api/users/update-avatar) | +| Delete Avatar | [Удаление аватара сотрудника](/api/users/remove-avatar) | +| Get Status | [Статус сотрудника](/api/users/get-status) | +| Update Status | [Новый статус сотрудника](/api/users/update-status) | +| Delete Status | [Удаление статуса сотрудника](/api/users/remove-status) | --- @@ -8365,12 +8378,12 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Новый тег](POST /group_tags) | -| Get Many | [Список тегов сотрудников](GET /group_tags) | -| Get | [Информация о теге](GET /group_tags/{id}) | -| Update | [Редактирование тега](PUT /group_tags/{id}) | -| Delete | [Удаление тега](DELETE /group_tags/{id}) | -| Get Many Users | [Список сотрудников тега](GET /group_tags/{id}/users) | +| Create | [Новый тег](/api/group-tags/create) | +| Get Many | [Список тегов сотрудников](/api/group-tags/list) | +| Get | [Информация о теге](/api/group-tags/get) | +| Update | [Редактирование тега](/api/group-tags/update) | +| Delete | [Удаление тега](/api/group-tags/delete) | +| Get Many Users | [Список сотрудников тега](/api/group-tags/list-users) | --- @@ -8380,10 +8393,10 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Новый тред](POST /messages/{id}/thread) | -| Create Standalone | [Новый самостоятельный тред](POST /threads) | -| Get | [Информация о треде](GET /threads/{id}) | -| Get Many | [Список тредов](GET /threads) | +| Create | [Новый тред](/api/threads/add) | +| Create Standalone | [Новый самостоятельный тред](/api/threads/create) | +| Get | [Информация о треде](/api/threads/get) | +| Get Many | [Список тредов](/api/threads/list) | --- @@ -8393,9 +8406,9 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Добавление реакции](POST /messages/{id}/reactions) | -| Delete | [Удаление реакции](DELETE /messages/{id}/reactions) | -| Get Many | [Список реакций](GET /messages/{id}/reactions) | +| Create | [Добавление реакции](/api/reactions/add) | +| Delete | [Удаление реакции](/api/reactions/remove) | +| Get Many | [Список реакций](/api/reactions/list) | --- @@ -8405,12 +8418,12 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Get | [Свой профиль](GET /profile) | -| Update Avatar | [Загрузка своего аватара](PUT /profile/avatar) | -| Delete Avatar | [Удаление своего аватара](DELETE /profile/avatar) | -| Get Status | [Свой статус](GET /profile/status) | -| Update Status | [Новый свой статус](PUT /profile/status) | -| Delete Status | [Удаление своего статуса](DELETE /profile/status) | +| Get | [Свой профиль](/api/profile/get) | +| Update Avatar | [Загрузка своего аватара](/api/profile/update-avatar) | +| Delete Avatar | [Удаление своего аватара](/api/profile/delete-avatar) | +| Get Status | [Свой статус](/api/profile/get-status) | +| Update Status | [Новый свой статус](/api/profile/update-status) | +| Delete Status | [Удаление своего статуса](/api/profile/delete-status) | **Загрузка аватара:** операция Update Avatar принимает бинарные данные из предыдущего узла (например, HTTP Request или Read Binary File). В поле **Input Binary Field** укажите имя бинарного свойства (по умолчанию `data`). @@ -8422,7 +8435,7 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Get Info | [Информация о токене](GET /oauth/token/info) | +| Get Info | [Информация о токене](/api/oauth/token-info) | --- @@ -8432,11 +8445,11 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Новое напоминание](POST /tasks) | -| Get Many | [Список напоминаний](GET /tasks) | -| Get | [Информация о напоминании](GET /tasks/{id}) | -| Update | [Редактирование напоминания](PUT /tasks/{id}) | -| Delete | [Удаление напоминания](DELETE /tasks/{id}) | +| Create | [Новое напоминание](/api/tasks/create) | +| Get Many | [Список напоминаний](/api/tasks/list) | +| Get | [Информация о напоминании](/api/tasks/get) | +| Update | [Редактирование напоминания](/api/tasks/update) | +| Delete | [Удаление напоминания](/api/tasks/delete) | **Типы задач:** `call`, `email`, `event`, `meeting`, `reminder`. @@ -8448,16 +8461,16 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Новый бот](POST /bots) | -| Get | [Информация о боте](GET /bots/{id}) | -| Get Many | [Список ботов](GET /bots) | -| Update | [Редактирование бота](PUT /bots/{id}) | -| Delete | [Удаление бота](DELETE /bots/{id}) | -| Update Webhook | [Саморегистрация вебхука бота](PUT /bot/webhook) | -| Recreate Token | [Ротация токена бота](POST /bots/{id}/recreate_token) | -| Recreate Token Self | [Ротация собственного токена бота](POST /bot/recreate_token) | -| Get Many Events | [История событий](GET /webhooks/events) | -| Remove Events | [Удаление события](DELETE /webhooks/events/{id}) | +| Create | [Новый бот](/api/bots/create) | +| Get | [Информация о боте](/api/bots/get) | +| Get Many | [Список ботов](/api/bots/list) | +| Update | [Редактирование бота](/api/bots/update) | +| Delete | [Удаление бота](/api/bots/delete) | +| Update Webhook | [Саморегистрация вебхука бота](/api/bots/update-webhook) | +| Recreate Token | [Ротация токена бота](/api/bots/recreate-token) | +| Recreate Token Self | [Ротация собственного токена бота](/api/bots/recreate-token-self) | +| Get Many Events | [История событий](/api/bots/list-events) | +| Remove Events | [Удаление события](/api/bots/remove-event) | --- @@ -8467,9 +8480,9 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Загрузка файла](POST /uploads) | +| Create | [Загрузка файла](/api/files/uploads) | -Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#zagruzka-fajlov). +Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#zagruzka-faylov). --- @@ -8479,7 +8492,7 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Create | [Открытие представления](POST /views/open) | +| Create | [Открытие представления](/api/views/open) | Подробнее — в разделе [Продвинутые функции](/guides/n8n/advanced#formy) и в [документации форм](/guides/forms/overview). @@ -8491,7 +8504,7 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Get | [Список дополнительных полей](GET /custom_properties) | +| Get | [Список дополнительных полей](/api/custom-properties/list) | --- @@ -8501,7 +8514,7 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Get Many Read Member IDs | [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) | +| Get Many Read Member IDs | [Список прочитавших сообщение](/api/read-member/list-readers) | --- @@ -8511,9 +8524,9 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Get Many Chats | [Поиск чатов](GET /search/chats) | -| Get Many Messages | [Поиск сообщений](GET /search/messages) | -| Get Many Users | [Поиск сотрудников](GET /search/users) | +| Get Many Chats | [Поиск чатов](/api/search/list-chats) | +| Get Many Messages | [Поиск сообщений](/api/search/list-messages) | +| Get Many Users | [Поиск сотрудников](/api/search/list-users) | **Обязательный параметр:** `query` — строка поиска. @@ -8525,7 +8538,7 @@ Workflow — визуальный редактор, в котором выстр | Операция | API | |----------|-----| -| Get Many | [Журнал аудита событий](GET /audit_events) | +| Get Many | [Журнал аудита событий](/api/security/list) | **Фильтры:** `eventKey`, `actorId`, `actorType`, `entityId`, `entityType`, `startTime`, `endTime`. @@ -8582,7 +8595,7 @@ n8n автоматически отправляет повторные запр Для поля **Chat ID** доступен поиск по имени: начните вводить текст, и n8n покажет подходящие результаты из вашего пространства Пачки. -Поиск вызывает API-эндпоинт [Поиск чатов](GET /search/chats) и работает только с валидным `Access Token` в Credentials. +Поиск вызывает API-эндпоинт [Поиск чатов](/api/search/list-chats) и работает только с валидным `Access Token` в Credentials. ## Связанные разделы @@ -8671,7 +8684,7 @@ Pachca Trigger поддерживает два режима настройки: | Режим | Что делает узел | Когда использовать | |-------|-----------------|---------------------| | **Ручной** (по умолчанию) | Не трогает настройки бота. Вы сами копируете Production URL из панели узла и вставляете его в настройки бота в Пачке. | Работает с любым токеном, включая токены ботов. Не может случайно перезатереть webhook-слот. | -| **Автоматический** | При активации workflow регистрирует Production URL в настройках бота, при деактивации — очищает. С **токеном бота** — саморегистрация через [Саморегистрация вебхука бота](PUT /bot/webhook), без Bot ID. С **персональным токеном** — через [Редактирование бота](PUT /bots/{id}): нужны скоуп `bots:write`, доступ редактора к боту и Bot ID. | Когда хотите, чтобы n8n сам управлял webhook-слотом бота. | +| **Автоматический** | При активации workflow регистрирует Production URL в настройках бота, при деактивации — очищает. С **токеном бота** — саморегистрация через [Саморегистрация вебхука бота](/api/bots/update-webhook), без Bot ID. С **персональным токеном** — через [Редактирование бота](/api/bots/update): нужны скоуп `bots:write`, доступ редактора к боту и Bot ID. | Когда хотите, чтобы n8n сам управлял webhook-слотом бота. | > По умолчанию установлен **ручной режим** — он работает с любым типом токена и не может случайно перезаписать webhook-слот бота. @@ -8686,7 +8699,7 @@ Pachca Trigger поддерживает два режима настройки: *Настройка Pachca Trigger* -Режим по умолчанию. Узел не обращается к [Редактирование бота](PUT /bots/{id}) — вы копируете Webhook URL из n8n и вставляете его в настройки бота в Пачке самостоятельно. При деактивации workflow узел тоже ничего не делает со слотом. +Режим по умолчанию. Узел не обращается к [Редактирование бота](/api/bots/update) — вы копируете Webhook URL из n8n и вставляете его в настройки бота в Пачке самостоятельно. При деактивации workflow узел тоже ничего не делает со слотом. ### Шаг 1. Добавьте Pachca Trigger @@ -8710,7 +8723,7 @@ Pachca Trigger поддерживает два режима настройки: ### Шаг 3. Вставьте URL в настройки бота в Пачке -Откройте настройки вашего бота в Пачке, перейдите на вкладку **Исходящий Webhook** и вставьте скопированный Production URL в поле **Webhook URL**. Подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroiki). +Откройте настройки вашего бота в Пачке, перейдите на вкладку **Исходящий Webhook** и вставьте скопированный Production URL в поле **Webhook URL**. Подробнее — в разделе [Настройка и типы событий](/guides/webhook/events#obschie-nastroyki). ### Шаг 4. Вернитесь в n8n и активируйте @@ -8731,7 +8744,7 @@ Pachca Trigger поддерживает два режима настройки: *Автоматический режим: переключатель Webhook Setup и поле Bot ID (нужно только для персонального токена)* -Узел определяет тип токена методом [Свой профиль](GET /profile). **Токен бота** регистрирует свой вебхук сам — методом [Саморегистрация вебхука бота](PUT /bot/webhook), Bot ID не нужен. **Персональный токен** прописывает вебхук выбранному боту методом [Редактирование бота](PUT /bots/{id}) — Bot ID обязателен, потому что персональный токен не привязан к конкретному боту. +Узел определяет тип токена методом [Свой профиль](/api/profile/get). **Токен бота** регистрирует свой вебхук сам — методом [Саморегистрация вебхука бота](/api/bots/update-webhook), Bot ID не нужен. **Персональный токен** прописывает вебхук выбранному боту методом [Редактирование бота](/api/bots/update) — Bot ID обязателен, потому что персональный токен не привязан к конкретному боту. ### Шаг 1. Вставьте токен в Credentials @@ -8807,7 +8820,7 @@ sequenceDiagram ### Проверка подписи -Для защиты от поддельных запросов добавьте **Signing Secret** бота в [Credentials](/guides/n8n/setup#sozdanie-credentials). Trigger автоматически проверяет HMAC-SHA256 подпись каждого входящего запроса через заголовок `pachca-signature` и отклоняет невалидные. +Для защиты от поддельных запросов добавьте **Signing Secret** бота в [Credentials](/guides/n8n/setup#nastroyka-credentials). Trigger автоматически проверяет HMAC-SHA256 подпись каждого входящего запроса через заголовок `pachca-signature` и отклоняет невалидные. Подробнее о механизме подписи — в разделе [Безопасность и обработчик](/guides/webhook/handler#bezopasnost). @@ -8816,7 +8829,7 @@ sequenceDiagram ### Ограничение по IP -Укажите **Webhook Allowed IPs** в [Credentials](/guides/n8n/setup#sozdanie-credentials) — через запятую список IP-адресов, с которых принимаются вебхуки. Пачка отправляет вебхуки с IP `37.200.70.177`. +Укажите **Webhook Allowed IPs** в [Credentials](/guides/n8n/setup#nastroyka-credentials) — через запятую список IP-адресов, с которых принимаются вебхуки. Пачка отправляет вебхуки с IP `37.200.70.177`. Если поле пустое — проверка IP отключена и запросы принимаются с любого адреса. @@ -8928,14 +8941,14 @@ Trigger автоматически отклоняет события старш ### Проверка Credentials -Перед первым запуском нажмите **Test** в форме Credentials. n8n вызовет [Информация о токене](GET /oauth/token/info) и покажет результат: +Перед первым запуском нажмите **Test** в форме Credentials. n8n вызовет [Информация о токене](/api/oauth/token-info) и покажет результат: ![Успешная проверка Credentials](/images/n8n/credentials-test.avif) *Connection tested successfully* -При ошибке 401 — токен неверный или просрочен. Симптомы и решения — в разделе [401 Unauthorized](/guides/n8n/troubleshooting#nevernyi-token-401-unauthorized). +При ошибке 401 — токен неверный или просрочен. Симптомы и решения — в разделе [401 Unauthorized](/guides/n8n/troubleshooting#nevernyy-token-401-unauthorized). ## Тестирование триггера @@ -8964,7 +8977,7 @@ Trigger автоматически отклоняет события старш Когда вы нажимаете **Listen for Test Event** на узле **Pachca Trigger** в автоматическом режиме: -1. n8n вызывает [Редактирование бота](PUT /bots/{id}) с `webhook_url = Test URL` +1. n8n вызывает [Редактирование бота](/api/bots/update) с `webhook_url = Test URL` 2. Пачка записывает Test URL в настройки бота (в слот `outgoing_url`) 3. В течение 120 секунд бот отправляет события не на Production URL, а на Test URL 4. n8n перехватывает событие и показывает его в редакторе @@ -8995,14 +9008,14 @@ Trigger автоматически отклоняет события старш ### Шаг 2. Временная деактивация продакшен-workflow -Если второго бота нет, деактивируйте продакшн-workflow перед тестом: нажмите **Active** в правом верхнем углу (переключатель станет серым). Узел **Pachca Trigger** вызовет [Редактирование бота](PUT /bots/{id}) с пустым `webhook_url` и освободит слот. +Если второго бота нет, деактивируйте продакшн-workflow перед тестом: нажмите **Active** в правом верхнем углу (переключатель станет серым). Узел **Pachca Trigger** вызовет [Редактирование бота](/api/bots/update) с пустым `webhook_url` и освободит слот. После этого запустите **Listen for Test Event**, проведите тест, снова активируйте workflow. На время теста продакшен будет выключен — учитывайте это, если на workflow приходит критичный трафик. ### Шаг 3. Подмена URL в ручном режиме -Оставьте **Webhook Setup** = **Manual** (значение по умолчанию) — в [ручном режиме](/guides/n8n/trigger#ruchnoi-rezhim) узел не управляет `outgoing_url`, и вы сами решаете, какой URL прописан в настройках бота в Пачке. Можно временно вручную заменить Production URL на Test URL в настройках бота, провести тест, затем вернуть Production URL обратно. +Оставьте **Webhook Setup** = **Manual** (значение по умолчанию) — в [ручном режиме](/guides/n8n/trigger#ruchnoy-rezhim) узел не управляет `outgoing_url`, и вы сами решаете, какой URL прописан в настройках бота в Пачке. Можно временно вручную заменить Production URL на Test URL в настройках бота, провести тест, затем вернуть Production URL обратно. Этот способ даёт максимальный контроль, но требует аккуратности — легко забыть вернуть Production URL. @@ -9103,10 +9116,10 @@ sequenceDiagram ## Если что-то пошло не так -- **Вебхук не приходит** — проверьте, что бот в чате и workflow активен. Симптомы и решения: [Вебхук не приходит](/guides/n8n/troubleshooting#vebkhuk-ne-prikhodit) +- **Вебхук не приходит** — проверьте, что бот в чате и workflow активен. Симптомы и решения: [Вебхук не приходит](/guides/n8n/troubleshooting#vebhuk-ne-prihodit) - **403 при активации Pachca Trigger** — токену не хватает прав: для токена бота `bot_self:webhook:write`, для персонального `bots:write` плюс доступ редактора к боту. Решение: [403 Forbidden при активации Pachca Trigger](/guides/n8n/troubleshooting#403-forbidden-pri-aktivatsii-pachca-trigger) - **Signature Mismatch** — Signing Secret в Credentials не совпадает с секретом бота. Решение: [Ошибка подписи](/guides/n8n/troubleshooting#oshibka-podpisi-signature-mismatch) -- **401 Unauthorized** — неверный или просроченный токен. Решение: [401 Unauthorized](/guides/n8n/troubleshooting#nevernyi-token-401-unauthorized) +- **401 Unauthorized** — неверный или просроченный токен. Решение: [401 Unauthorized](/guides/n8n/troubleshooting#nevernyy-token-401-unauthorized) Полный список типовых ошибок — в разделе [Устранение ошибок](/guides/n8n/troubleshooting). @@ -9230,7 +9243,7 @@ sequenceDiagram ] ``` -Подробнее о кнопках — в разделе [Продвинутые функции](/guides/n8n/advanced#knopki-v-soobshheniyax). +Подробнее о кнопках — в разделе [Продвинутые функции](/guides/n8n/advanced#knopki-v-soobscheniyah). - [approval.json](/workflows/n8n/approval.json) — Отправка запроса с кнопками - [approval-handler.json](/workflows/n8n/approval-handler.json) — Обработка нажатий кнопок @@ -9295,7 +9308,7 @@ sequenceDiagram **Что задействовано:** триггер, кнопки, формы, треды, условная логика. -> Подробнее о кнопках — в разделе [Кнопки в сообщениях](/guides/n8n/advanced#knopki-v-soobshheniyax), о формах — в разделе [Формы](/guides/n8n/advanced#formy). +> Подробнее о кнопках — в разделе [Кнопки в сообщениях](/guides/n8n/advanced#knopki-v-soobscheniyah), о формах — в разделе [Формы](/guides/n8n/advanced#formy). - [vacation.json](/workflows/n8n/vacation.json) — Приём команды и кнопка заявки @@ -9470,7 +9483,7 @@ sequenceDiagram 1. Пользователь нажимает Data-кнопку в сообщении бота 2. Бот получает вебхук с `trigger_id` -3. Бот вызывает [Открытие представления](POST /views/open) с `trigger_id` и описанием формы +3. Бот вызывает [Открытие представления](/api/views/open) с `trigger_id` и описанием формы 4. Пользователь видит модальное окно с полями **Ключевые параметры:** @@ -9539,7 +9552,7 @@ AI Agent самостоятельно выбирает подходящий ин Ресурс **Message** с операцией **Unfurl** позволяет формировать кастомные превью для ссылок в сообщениях бота. -Когда бот отправляет сообщение со ссылкой, Пачка может запросить у бота данные для превью. Бот может ответить через [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) с заголовком, описанием и изображением. +Когда бот отправляет сообщение со ссылкой, Пачка может запросить у бота данные для превью. Бот может ответить через [Unfurl (разворачивание ссылок)](/api/messages/unfurl) с заголовком, описанием и изображением. Подробнее — в [документации разворачивания ссылок](/guides/link-previews). @@ -9636,7 +9649,7 @@ AI Agent самостоятельно выбирает подходящий ин ### 403 Forbidden при активации Pachca Trigger -**Причина:** узел попытался автоматически прописать Webhook URL, но у токена не хватает прав. Для **токена бота** нужен скоуп `bot_self:webhook:write` (саморегистрация через [Саморегистрация вебхука бота](PUT /bot/webhook)). Для **персонального токена** — скоуп `bots:write` и доступ редактора к указанному боту (регистрация через [Редактирование бота](PUT /bots/{id})). +**Причина:** узел попытался автоматически прописать Webhook URL, но у токена не хватает прав. Для **токена бота** нужен скоуп `bot_self:webhook:write` (саморегистрация через [Саморегистрация вебхука бота](/api/bots/update-webhook)). Для **персонального токена** — скоуп `bots:write` и доступ редактора к указанному боту (регистрация через [Редактирование бота](/api/bots/update)). Текст ошибки: @@ -9650,7 +9663,7 @@ AI Agent самостоятельно выбирает подходящий ин 1. **Токен бота:** включите для бота скоуп `bot_self:webhook:write` — настройки бота → вкладка **API** 2. **Персональный токен:** убедитесь, что у пользователя токена стоит роль **Редактор** в списке доступов бота, и что у токена есть скоуп `bots:write` (в настройках токена в **Автоматизации** → **Интеграции** → **API**) -3. Либо переключите **Webhook Setup** = **Manual** и пропишите Production URL в настройках бота самостоятельно — см. [Ручной режим](/guides/n8n/trigger#ruchnoi-rezhim) +3. Либо переключите **Webhook Setup** = **Manual** и пропишите Production URL в настройках бота самостоятельно — см. [Ручной режим](/guides/n8n/trigger#ruchnoy-rezhim) --- @@ -9714,7 +9727,7 @@ AI Agent самостоятельно выбирает подходящий ин ### Форма не открывается -**Причина:** `trigger_id` из события `button_pressed` действителен только **3 секунды**. Если между получением вебхука и вызовом [Открытие представления](POST /views/open) проходит больше времени — форма не откроется. +**Причина:** `trigger_id` из события `button_pressed` действителен только **3 секунды**. Если между получением вебхука и вызовом [Открытие представления](/api/views/open) проходит больше времени — форма не откроется. **Решение:** @@ -9890,6 +9903,8 @@ AI Agent самостоятельно выбирает подходящий ин REST API Пачки позволяет автоматизировать работу в мессенджере: отправлять сообщения, управлять чатами и сотрудниками, создавать ботов и реагировать на события через вебхуки. +Если только начинаете, загляните в [руководства](/) с пошаговыми примерами. Можно обойтись и без написания кода: соберите интеграции из визуальных блоков в no-code инструменте [n8n](/guides/n8n/overview). + Базовый URL: `https://api.pachca.com/api/shared/v1` Клиенты и SDK: @@ -10063,7 +10078,7 @@ dotnet add package Pachca.Sdk Бот виден в пространстве как отдельный участник со своим именем и аватаром. Получить его `access_token` можно двумя способами: - **В интерфейсе** — во вкладке **API** в настройках бота. -- **Через API** — методом [Новый бот](POST /bots): он создаёт бота и сразу возвращает `access_token`. Сохраните токен из ответа — повторно получить его можно только через интерфейс. +- **Через API** — методом [Новый бот](/api/bots/create): он создаёт бота и сразу возвращает `access_token`. Сохраните токен из ответа — повторно получить его можно только через интерфейс. Подробнее о создании и настройке бота — в разделе [Боты](/guides/bots/overview). @@ -10071,16 +10086,16 @@ dotnet add package Pachca.Sdk Некоторые возможности API доступны исключительно с токеном бота: -- [Удаление события](DELETE /webhooks/events/{id}) — удаление события из истории событий бота -- [Саморегистрация вебхука бота](PUT /bot/webhook) — бот сам меняет `URL` своего исходящего вебхука -- [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) — создание предпросмотров ссылок в сообщениях -- [Открытие представления](POST /views/open) — открытие модального окна с формой для пользователя +- [Удаление события](/api/bots/remove-event) — удаление события из истории событий бота +- [Саморегистрация вебхука бота](/api/bots/update-webhook) — бот сам меняет `URL` своего исходящего вебхука +- [Unfurl (разворачивание ссылок)](/api/messages/unfurl) — создание предпросмотров ссылок в сообщениях +- [Открытие представления](/api/views/open) — открытие модального окна с формой для пользователя -Также при отправке сообщений ([Новое сообщение](POST /messages), [Новый тред](POST /messages/{id}/thread)) поля `icon_url` и `name` для кастомного аватара и имени отправителя работают только с токеном бота. +Также при отправке сообщений ([Новое сообщение](/api/messages/create), [Новый тред](/api/threads/add)) поля `icon_url` и `name` для кастомного аватара и имени отправителя работают только с токеном бота. ## Заголовок авторизации -Все запросы к API (кроме [Загрузки файла](POST /direct_url)) должны содержать заголовок: +Все запросы к API (кроме [Загрузки файла](/api/files/direct-url)) должны содержать заголовок: ```http title="Заголовок авторизации" Authorization: Bearer @@ -10097,11 +10112,11 @@ Authorization: Bearer Скоупы определяют, к каким методам API имеет доступ токен. Разные типы токенов получают скоупы по-разному: - **Персональный токен** — вы выбираете скоупы вручную при создании и можете изменить их позже в настройках токена. Токен получит только запрошенные разрешения. -- **Токен бота** — скоупы можно выбрать при создании или редактировании бота (параметр `scopes` в методах [Новый бот](POST /bots) и [Редактирование бота](PUT /bots/{id}) либо во вкладке «API» настроек бота). Если скоупы не указаны, бот получает набор по умолчанию. +- **Токен бота** — скоупы можно выбрать при создании или редактировании бота (параметр `scopes` в методах [Новый бот](/api/bots/create) и [Редактирование бота](/api/bots/update) либо во вкладке «API» настроек бота). Если скоупы не указаны, бот получает набор по умолчанию. -Боту доступны и собственные скоупы самоуправления, недоступные персональным токенам: `bot_self:webhook:write` — бот сам меняет `URL` своего исходящего вебхука методом [Саморегистрация вебхука бота](PUT /bot/webhook), и `bot_self:write` — самостоятельное управление настройками бота. +Боту доступны и собственные скоупы самоуправления, недоступные персональным токенам: `bot_self:webhook:write` — бот сам меняет `URL` своего исходящего вебхука методом [Саморегистрация вебхука бота](/api/bots/update-webhook), и `bot_self:write` — самостоятельное управление настройками бота. -Проверить скоупы текущего токена можно методом [Информация о токене](GET /oauth/token/info). +Проверить скоупы текущего токена можно методом [Информация о токене](/api/oauth/token-info). ### Доступные скоупы @@ -10390,13 +10405,13 @@ API Пачки использует **cursor-based** пагинацию для В API существует две группы методов, **возвращающих разную структуру `meta`** — алгоритмы обхода и условия конца данных у них отличаются. Перед интеграцией убедитесь, что вы знаете, к какой группе относится используемый метод. - [Списочные методы](#spisochnye-metody) — возвращают `meta.paginate` с четырьмя полями: `next_page`, `prev_page`, `has_next`, `has_prev`. -- [Методы поиска](#metody-poiska) — возвращают `meta` с полем `total` и `paginate.next_page` (только курсор «вперёд», без `prev_page`/`has_next`/`has_prev`). К этой группе по поведению также относится [Список сотрудников](GET /users) с заданным параметром `query` — `meta` возвращается в упрощённом формате. +- [Методы поиска](#metody-poiska) — возвращают `meta` с полем `total` и `paginate.next_page` (только курсор «вперёд», без `prev_page`/`has_next`/`has_prev`). К этой группе по поведению также относится [Список сотрудников](/api/users/list) с заданным параметром `query` — `meta` возвращается в упрощённом формате. ## Параметры запроса | Параметр | Тип | Описание | |----------|-----|----------| -| `limit` | integer | Количество записей на странице. Допустимые значения зависят от метода: большинство списочных методов — 1–50, [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) — до 300, [Поиск чатов](GET /search/chats) — до 100, [Поиск сотрудников](GET /search/users) и [Поиск сообщений](GET /search/messages) — до 200 | +| `limit` | integer | Количество записей на странице. Допустимые значения зависят от метода: большинство списочных методов — 1–50, [Список прочитавших сообщение](/api/read-member/list-readers) — до 300, [Поиск чатов](/api/search/list-chats) — до 100, [Поиск сотрудников](/api/search/list-users) и [Поиск сообщений](/api/search/list-messages) — до 200 | | `cursor` | string | Курсор для получения страницы (значение `meta.paginate.next_page` или `meta.paginate.prev_page` из предыдущего ответа) | ## Списочные методы @@ -10407,9 +10422,9 @@ API Пачки использует **cursor-based** пагинацию для - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` ```json title="Пример ответа списочного метода" @@ -10433,14 +10448,14 @@ API Пачки использует **cursor-based** пагинацию для | `has_next` | boolean | Есть ли ещё данные на следующей странице. На последней странице — `false`. | | `has_prev` | boolean | Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. | -К этой группе относятся: [Список сотрудников](GET /users) (без `query`), [Список чатов](GET /chats), [Список участников чата](GET /chats/{id}/members), [Список сообщений чата](GET /messages), [Список реакций](GET /messages/{id}/reactions), [Список прочитавших сообщение](GET /messages/{id}/read_member_ids), [Список тегов сотрудников](GET /group_tags), [Список сотрудников тега](GET /group_tags/{id}/users), [Список напоминаний](GET /tasks), [Журнал аудита событий](GET /audit_events), [История событий](GET /webhooks/events). +К этой группе относятся: [Список сотрудников](/api/users/list) (без `query`), [Список чатов](/api/chats/list), [Список участников чата](/api/members/list), [Список сообщений чата](/api/messages/list), [Список реакций](/api/reactions/list), [Список прочитавших сообщение](/api/read-member/list-readers), [Список тегов сотрудников](/api/group-tags/list), [Список сотрудников тега](/api/group-tags/list-users), [Список напоминаний](/api/tasks/list), [Журнал аудита событий](/api/security/list), [История событий](/api/bots/list-events). > В списочных методах поля `next_page`, `prev_page`, `has_next`, `has_prev` **всегда присутствуют** в ответе — даже когда `data` пустой. Курсоры никогда не бывают `null`. Признак конца данных — `has_next: false` (вперёд) или `has_prev: false` (назад), а не пустой `data`. Количество записей в `data` может быть меньше `limit` и на промежуточных страницах — не полагайтесь на длину массива. Курсор — непрозрачный токен: не парсите, не конструируйте вручную и не сохраняйте между сессиями. Всегда явно указывайте `limit` — не полагайтесь на значение по умолчанию. ### Сценарии и состояния `meta.paginate` -Поведение полей `meta.paginate` для типичных сценариев пагинации (на примере [Списка чатов](GET /chats) с DESC-сортировкой): +Поведение полей `meta.paginate` для типичных сценариев пагинации (на примере [Списка чатов](/api/chats/list) с DESC-сортировкой): | Сценарий | Запрос | `data` | `next_page` | `prev_page` | `has_next` | `has_prev` | |----------|--------|--------|-------------|-------------|-----------|-----------| @@ -10485,10 +10500,10 @@ API Пачки использует **cursor-based** пагинацию для К этой группе относятся: -- [Поиск сотрудников](GET /search/users) -- [Поиск чатов](GET /search/chats) -- [Поиск сообщений](GET /search/messages) -- [Список сотрудников](GET /users) **с заданным параметром `query`** — возвращает упрощённый `meta` без `prev_page`/`has_next`/`has_prev`. Если вызывать `/users` без `query`, ответ соответствует группе «Списочные методы» с полным `meta.paginate`. +- [Поиск сотрудников](/api/search/list-users) +- [Поиск чатов](/api/search/list-chats) +- [Поиск сообщений](/api/search/list-messages) +- [Список сотрудников](/api/users/list) **с заданным параметром `query`** — возвращает упрощённый `meta` без `prev_page`/`has_next`/`has_prev`. Если вызывать `/users` без `query`, ответ соответствует группе «Списочные методы» с полным `meta.paginate`. > В методах поиска **нет полей `prev_page`, `has_next`, `has_prev`** — поэтому polling новых результатов через `prev_page` здесь не работает. Конец данных определяйте по совпадению числа уже полученных записей с `total` или по пустому `data` в очередном ответе. Курсор `next_page` — непрозрачный токен, всегда указывайте `limit` явно. @@ -10627,7 +10642,7 @@ setInterval(async () => { ### Шаг 1. Получение параметров загрузки -Сделайте запрос к методу [Получение подписи, ключа и других параметров](POST /uploads) без тела для получения подписи и параметров. Данный метод необходимо использовать для загрузки каждого файла. +Сделайте запрос к методу [Получение подписи, ключа и других параметров](/api/files/uploads) без тела для получения подписи и параметров. Данный метод необходимо использовать для загрузки каждого файла. **Получение параметров загрузки** @@ -10642,22 +10657,22 @@ curl -X POST "https://api.pachca.com/api/shared/v1/uploads" \ ### Шаг 2. Загрузка файла -Отправьте запрос к методу [Загрузка файла](POST /direct_url) с форматом `multipart/form-data` на адрес `direct_url`. Включите все полученные параметры и сам файл. При успешной загрузке сервер вернёт `HTTP 201 Created`. +Отправьте запрос к методу [Загрузка файла](/api/files/direct-url) с форматом `multipart/form-data` на адрес `direct_url`. Включите все полученные параметры и сам файл. При успешной загрузке сервер вернёт `HTTP 201 Created`. **Загрузка файла** ```bash # URL получается из ответа POST /uploads (поле direct_url) curl "$DIRECT_URL" \ - -F "Content-Disposition=attachment" \ - -F "acl=private" \ - -F "policy=eyJloNBpcmF0aW9u..." \ - -F "x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request" \ - -F "x-amz-algorithm=AWS4-HMAC-SHA256" \ - -F "x-amz-date=20211122T065734Z" \ - -F "x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475" \ - -F "key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/$filename" \ - -F "file=@filename.png" + -F 'Content-Disposition=attachment' \ + -F 'acl=private' \ + -F 'policy=eyJloNBpcmF0aW9u...' \ + -F 'x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request' \ + -F 'x-amz-algorithm=AWS4-HMAC-SHA256' \ + -F 'x-amz-date=20211122T065734Z' \ + -F 'x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475' \ + -F 'key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}' \ + -F 'file=@filename.png' ``` @@ -10800,7 +10815,7 @@ await client.messages.create_message(MessageCreateRequest( ## Поля multipart-формы для S3 -Все поля из ответа [Получение подписи](POST /uploads) передаются на S3 **как есть** в multipart-форме: +Все поля из ответа [Получение подписи](/api/files/uploads) передаются на S3 **как есть** в multipart-форме: | Поле | Описание | |------|----------| @@ -10821,7 +10836,7 @@ await client.messages.create_message(MessageCreateRequest( | Ошибка | Причина | Решение | |--------|---------|---------| -| `403 Forbidden` при загрузке | Истекла подпись | Параметры загрузки действительны ограниченное время. Запросите новые через [Получение подписи](POST /uploads) | +| `403 Forbidden` при загрузке | Истекла подпись | Параметры загрузки действительны ограниченное время. Запросите новые через [Получение подписи](/api/files/uploads) | | `400 Bad Request` | Неправильный Content-Type | Убедитесь, что запрос отправляется как `multipart/form-data`, а не `application/json` | | Файл не отображается | Неверный `key` | Проверьте, что `${filename}` в ключе заменён на реальное имя файла | @@ -10881,11 +10896,11 @@ await client.messages.create_message(MessageCreateRequest( - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -11032,12 +11047,12 @@ users = await with_retry(lambda: client.users.list_users()) Все модели данных, возвращаемые в ответах API. Каждая модель содержит связанные методы и таблицу свойств. -> Методы [Получение подписи](POST /uploads) и [Загрузка файла](POST /direct_url) не возвращают модели данных. +> Методы [Получение подписи](/api/files/uploads) и [Загрузка файла](/api/files/direct-url) не возвращают модели данных. ## Дополнительное поле -- [Список дополнительных полей](GET /custom_properties) +- [Список дополнительных полей](/api/custom-properties/list) Дополнительное поле @@ -11049,46 +11064,46 @@ users = await with_retry(lambda: client.users.list_users()) ## Токен доступа -- [Информация о токене](GET /oauth/token/info) +- [Информация о токене](/api/oauth/token-info) Токен доступа - `id: integer, int64` (required) — Идентификатор токена. Пример: `4827` - `token: string` (required) — Маскированный токен (видны первые 8 и последние 4 символа). Пример: `"cH5kR9mN...x7Qp"` -- `name: string` (required) — Пользовательское имя токена. Пример: `"Мой API токен"` +- `name: string` (required, nullable) — Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную. Пример: `"Мой API токен"` - `user_id: integer, int64` (required) — Идентификатор владельца токена. Пример: `12` - `scopes: array of string` (required) — Список скоупов токена. Пример: `["messages:read","chats:read"]` - `created_at: date-time` (required) — Дата создания токена. Пример: `"2025-01-15T10:30:00.000Z"` -- `revoked_at: date-time` (required) — Дата отзыва токена. Пример: `null` -- `expires_in: integer, int32` (required) — Время жизни токена в секундах. Пример: `null` -- `last_used_at: date-time` (required) — Дата последнего использования токена. Пример: `"2025-02-24T14:20:00.000Z"` +- `revoked_at: date-time` (required, nullable) — Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401. Пример: `null` +- `expires_in: integer, int32` (required, nullable) — Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно. Пример: `null` +- `last_used_at: date-time` (required, nullable) — Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать. Пример: `"2025-02-24T14:20:00.000Z"` ## Статус пользователя -- [Статус сотрудника](GET /users/{user_id}/status) -- [Свой статус](GET /profile/status) -- [Новый свой статус](PUT /profile/status) -- [Новый статус сотрудника](PUT /users/{user_id}/status) -- [Удаление своего статуса](DELETE /profile/status) -- [Удаление статуса сотрудника](DELETE /users/{user_id}/status) +- [Статус сотрудника](/api/users/get-status) +- [Свой статус](/api/profile/get-status) +- [Новый свой статус](/api/profile/update-status) +- [Новый статус сотрудника](/api/users/update-status) +- [Удаление своего статуса](/api/profile/delete-status) +- [Удаление статуса сотрудника](/api/users/remove-status) Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` -- `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` +- `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` -- `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. +- `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` ## Аватар -- [Загрузка своего аватара](PUT /profile/avatar) -- [Удаление своего аватара](DELETE /profile/avatar) -- [Загрузка аватара сотрудника](PUT /users/{user_id}/avatar) -- [Удаление аватара сотрудника](DELETE /users/{user_id}/avatar) +- [Загрузка своего аватара](/api/profile/update-avatar) +- [Удаление своего аватара](/api/profile/delete-avatar) +- [Загрузка аватара сотрудника](/api/users/update-avatar) +- [Удаление аватара сотрудника](/api/users/remove-avatar) Данные аватара @@ -11097,63 +11112,63 @@ users = await with_retry(lambda: client.users.list_users()) ## Сотрудник -- [Новый сотрудник](POST /users) -- [Свой профиль](GET /profile) -- [Информация о сотруднике](GET /users/{id}) -- [Список сотрудников](GET /users) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список участников чата](GET /chats/{id}/members) -- [Поиск сотрудников](GET /search/users) -- [Редактирование сотрудника](PUT /users/{id}) -- [Удаление сотрудника](DELETE /users/{id}) +- [Новый сотрудник](/api/users/create) +- [Свой профиль](/api/profile/get) +- [Информация о сотруднике](/api/users/get) +- [Список сотрудников](/api/users/list) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список участников чата](/api/members/list) +- [Поиск сотрудников](/api/search/list-users) +- [Редактирование сотрудника](/api/users/update) +- [Удаление сотрудника](/api/users/delete) Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` -- `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` -- `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` +- `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` +- `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` -- `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` -- `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` -- `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` -- `title: string` (required) — Должность. Пример: `"CIO"` +- `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` +- `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` +- `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` +- `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено -- `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` +- `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` -- `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` +- `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` -- `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` -- `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` -- `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` +- `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` +- `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` +- `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` ## Тег -- [Новый тег](POST /group_tags) -- [Добавление тегов](POST /chats/{id}/group_tags) -- [Информация о теге](GET /group_tags/{id}) -- [Список тегов сотрудников](GET /group_tags) -- [Редактирование тега](PUT /group_tags/{id}) -- [Исключение тега](DELETE /chats/{id}/group_tags/{tag_id}) -- [Удаление тега](DELETE /group_tags/{id}) +- [Новый тег](/api/group-tags/create) +- [Добавление тегов](/api/members/add-group-tags) +- [Информация о теге](/api/group-tags/get) +- [Список тегов сотрудников](/api/group-tags/list) +- [Редактирование тега](/api/group-tags/update) +- [Исключение тега](/api/members/remove-group-tag) +- [Удаление тега](/api/group-tags/delete) Тег @@ -11164,19 +11179,19 @@ users = await with_retry(lambda: client.users.list_users()) ## Чат -- [Новый чат](POST /chats) -- [Добавление пользователей](POST /chats/{id}/members) -- [Экспорт сообщений](POST /chats/exports) -- [Информация о чате](GET /chats/{id}) -- [Список чатов](GET /chats) -- [Поиск чатов](GET /search/chats) -- [Скачать архив экспорта](GET /chats/exports/{id}) -- [Редактирование чата](PUT /chats/{id}) -- [Архивация чата](PUT /chats/{id}/archive) -- [Разархивация чата](PUT /chats/{id}/unarchive) -- [Редактирование роли](PUT /chats/{id}/members/{user_id}) -- [Выход из беседы или канала](DELETE /chats/{id}/leave) -- [Исключение пользователя](DELETE /chats/{id}/members/{user_id}) +- [Новый чат](/api/chats/create) +- [Добавление пользователей](/api/members/add) +- [Экспорт сообщений](/api/chats/request-export) +- [Информация о чате](/api/chats/get) +- [Список чатов](/api/chats/list) +- [Поиск чатов](/api/search/list-chats) +- [Скачать архив экспорта](/api/chats/download-export) +- [Редактирование чата](/api/chats/update) +- [Архивация чата](/api/chats/archive) +- [Разархивация чата](/api/chats/unarchive) +- [Редактирование роли](/api/members/update) +- [Выход из беседы или канала](/api/members/leave) +- [Исключение пользователя](/api/members/remove) Чат @@ -11195,32 +11210,32 @@ users = await with_retry(lambda: client.users.list_users()) ## Тред -- [Новый тред](POST /messages/{id}/thread) -- [Новый самостоятельный тред](POST /threads) -- [Информация о треде](GET /threads/{id}) -- [Список тредов](GET /threads) +- [Новый тред](/api/threads/add) +- [Новый самостоятельный тред](/api/threads/create) +- [Информация о треде](/api/threads/get) +- [Список тредов](/api/threads/list) Тред -- `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` -- `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` -- `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` -- `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` +- `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` +- `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` +- `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` +- `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` ## Сообщение -- [Новое сообщение](POST /messages) -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Unfurl (разворачивание ссылок)](POST /messages/{id}/link_previews) -- [Информация о сообщении](GET /messages/{id}) -- [Список сообщений чата](GET /messages) -- [Поиск сообщений](GET /search/messages) -- [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) -- [Редактирование сообщения](PUT /messages/{id}) -- [Открепление сообщения](DELETE /messages/{id}/pin) -- [Удаление сообщения](DELETE /messages/{id}) +- [Новое сообщение](/api/messages/create) +- [Закрепление сообщения](/api/messages/pin) +- [Unfurl (разворачивание ссылок)](/api/messages/unfurl) +- [Информация о сообщении](/api/messages/get) +- [Список сообщений чата](/api/messages/list) +- [Поиск сообщений](/api/search/list-messages) +- [Список прочитавших сообщение](/api/read-member/list-readers) +- [Редактирование сообщения](/api/messages/update) +- [Открепление сообщения](/api/messages/unpin) +- [Удаление сообщения](/api/messages/delete) Сообщение @@ -11229,7 +11244,7 @@ users = await with_retry(lambda: client.users.list_users()) Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` -- `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` +- `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -11241,36 +11256,36 @@ users = await with_retry(lambda: client.users.list_users()) - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` -- `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок -- `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` +- `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. +- `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` -- `forwarding: object` (required) — Информация о пересланном сообщении +- `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` -- `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` -- `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` -- `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` -- `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` -- `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` +- `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` +- `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` +- `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` +- `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` +- `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` ## Реакция на сообщение -- [Добавление реакции](POST /messages/{id}/reactions) -- [Список реакций](GET /messages/{id}/reactions) -- [Удаление реакции](DELETE /messages/{id}/reactions) +- [Добавление реакции](/api/reactions/add) +- [Список реакций](/api/reactions/list) +- [Удаление реакции](/api/reactions/remove) Реакция на сообщение @@ -11282,11 +11297,11 @@ users = await with_retry(lambda: client.users.list_users()) ## Напоминание -- [Новое напоминание](POST /tasks) -- [Информация о напоминании](GET /tasks/{id}) -- [Список напоминаний](GET /tasks) -- [Редактирование напоминания](PUT /tasks/{id}) -- [Удаление напоминания](DELETE /tasks/{id}) +- [Новое напоминание](/api/tasks/create) +- [Информация о напоминании](/api/tasks/get) +- [Список напоминаний](/api/tasks/list) +- [Редактирование напоминания](/api/tasks/update) +- [Удаление напоминания](/api/tasks/delete) Напоминание @@ -11294,10 +11309,10 @@ users = await with_retry(lambda: client.users.list_users()) - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` -- `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` +- `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` -- `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` +- `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -11308,23 +11323,23 @@ users = await with_retry(lambda: client.users.list_users()) - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` ## Представление -- [Открытие представления](POST /views/open) +- [Открытие представления](/api/views/open) Представление - `type: string` (required) — Способ открытия представления. Пример: `"modal"` Значения: `modal` — Модальное окно - `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки). Пример: `"791a056b-006c-49dd-834b-c633fde52fe8"` -- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.. Пример: `"{"timeoff_id":4378}"` -- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.. Пример: `"timeoff_reguest_form"` +- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. Пример: `"{\"timeoff_id\":4378}"` +- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. Пример: `"timeoff_request_form"` - `view: object` (required) — Собранный объект представления - `title: string` (required, max length: 24) — Заголовок представления. Пример: `"Уведомление об отпуске"` - - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.. Пример: `"Закрыть"` + - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. Пример: `"Закрыть"` - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы. Пример: `"Отправить заявку"` - `blocks: array (union)` (required, max items: 100) — Массив блоков представления **Возможные типы элементов:** @@ -11413,21 +11428,21 @@ users = await with_retry(lambda: client.users.list_users()) - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения - `label: string` (required, max length: 150) — Подпись к полю - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты. - - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле. + - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле - `required: boolean` (default: false) — Обязательность - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом ## Параметры бота -- [Новый бот](POST /bots) -- [Список ботов](GET /bots) -- [Информация о боте](GET /bots/{id}) -- [Редактирование бота](PUT /bots/{id}) -- [Удаление бота](DELETE /bots/{id}) -- [Саморегистрация вебхука бота](PUT /bot/webhook) -- [Ротация токена бота](POST /bots/{id}/recreate_token) -- [Ротация собственного токена бота](POST /bot/recreate_token) +- [Новый бот](/api/bots/create) +- [Список ботов](/api/bots/list) +- [Информация о боте](/api/bots/get) +- [Редактирование бота](/api/bots/update) +- [Удаление бота](/api/bots/delete) +- [Саморегистрация вебхука бота](/api/bots/update-webhook) +- [Ротация токена бота](/api/bots/recreate-token) +- [Ротация собственного токена бота](/api/bots/recreate-token-self) Параметры бота @@ -11435,29 +11450,29 @@ users = await with_retry(lambda: client.users.list_users()) - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости ## Событие исходящего вебхука -- [История событий](GET /webhooks/events) -- [Удаление события](DELETE /webhooks/events/{id}) +- [История событий](/api/bots/list-events) +- [Удаление события](/api/bots/remove-event) Событие исходящего вебхука @@ -11480,8 +11495,8 @@ users = await with_retry(lambda: client.users.list_users()) - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `url: string` (required) — Прямая ссылка на сообщение. Пример: `"https://pachca.com/chats/1245817/messages/5678"` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012` - - `parent_message_id: integer, int32` — Идентификатор сообщения, к которому написан ответ. Пример: `3456` - - `thread: object` — Объект с параметрами треда + - `parent_message_id: integer, int32` (nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `3456` + - `thread: object` — Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение. - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -11490,12 +11505,12 @@ users = await with_retry(lambda: client.users.list_users()) Значения: `reaction` — Для реакций всегда reaction - `event: string` (required) — Тип события Значения: `new` — Создание, `delete` — Удаление - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.. Пример: `9012` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`. Пример: `9012` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817` - `code: string` (required) — Emoji символ реакции. Пример: `"👍"` - `name: string` (required) — Название реакции. Пример: `"thumbsup"` - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345` - - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.. Пример: `"2025-05-15T14:30:00.000Z"` + - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - **ButtonWebhookPayload**: Структура исходящего вебхука о нажатии кнопки - `type: string` (required) — Тип объекта. Пример: `"button"` @@ -11513,11 +11528,11 @@ users = await with_retry(lambda: client.users.list_users()) Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы - - `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` - - `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` + - `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` + - `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` - - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные + - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` @@ -11527,7 +11542,7 @@ users = await with_retry(lambda: client.users.list_users()) - `event: string` (required) — Тип события Значения: `add` — Добавление, `remove` — Удаление - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012` - - `thread_id: integer, int32` — Идентификатор треда. Пример: `5678` + - `thread_id: integer, int32` (nullable) — Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. Пример: `5678` - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]` - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -11566,24 +11581,24 @@ users = await with_retry(lambda: client.users.list_users()) - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438` - - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.. Пример: `"2025-05-15T14:30:00.000Z"` - - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.. Пример: `"2025-05-15T14:45:00.000Z"` - - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.. Пример: `900` + - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished. Пример: `"2025-05-15T14:30:00.000Z"` + - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished. Пример: `"2025-05-15T14:45:00.000Z"` + - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи. Пример: `900` - `members: array of object` — Список участников звонка. Присутствует для события finished. - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345` - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.. Пример: `"2025-05-15T14:45:00.000Z"` - - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready.. Пример: `4567` - - `file_id: integer, int32` — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.. Пример: `89012` - - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready.. Пример: `"https://api.pachca.com/files/89012"` - - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready.. Пример: `10485760` + - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка. Пример: `"2025-05-15T14:45:00.000Z"` + - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready. Пример: `4567` + - `file_id: integer, int32` (nullable) — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан. Пример: `89012` + - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready. Пример: `"https://api.pachca.com/files/89012"` + - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready. Пример: `10485760` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` ## Событие аудита -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) Событие аудита @@ -11595,10 +11610,10 @@ users = await with_retry(lambda: client.users.list_users()) - `entity_type: string` (required) — Тип затронутой сущности. Пример: `"User"` - `actor_id: string` (required) — Идентификатор пользователя, выполнившего действие. Пример: `"98765"` - `actor_type: string` (required) — Тип актора. Пример: `"User"` -- `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект +- `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект. **Возможные варианты:** - - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted + - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted. - **AuditDetailsUserUpdated**: При: user_updated - `changed_attrs: array of string` (required) — Список изменённых полей - **AuditDetailsRoleChanged**: При: user_role_changed @@ -11633,21 +11648,21 @@ users = await with_retry(lambda: client.users.list_users()) - `message_id: integer, int32` (required) — Идентификатор сообщения - `chat_id: integer, int32` (required) — Идентификатор чата - `user_id: integer, int32` (required) — Идентификатор пользователя - - `action_message: string` (required) — Описание действия. `null`, если у действия правила текст не задан. + - `action_message: string` (required, nullable) — Описание действия. `null`, если у действия правила текст не задан. - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали) - **AuditDetailsSearch**: При: search_users_api, search_chats_api, search_messages_api - `search_type: string` (required) — Тип поиска - `query_present: boolean` (required) — Указан ли поисковый запрос - `cursor_present: boolean` (required) — Использован ли курсор - `limit: integer, int32` (required) — Количество возвращённых результатов - - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages) + - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsBotScopes**: При: bot_scopes_updated - `added_scopes: array of string` (required) — Скоупы, добавленные токену бота - `removed_scopes: array of string` (required) — Скоупы, отозванные у токена бота - **AuditDetailsBotWebhookSettings**: При: bot_webhook_settings_updated - - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение) + - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsVideoCall**: При: video_call_started, video_call_finished @@ -11694,13 +11709,13 @@ curl "https://api.pachca.com/api/shared/v1/oauth/token/info" \ - `data: object` (required) — Токен доступа - `id: integer, int64` (required) — Идентификатор токена. Пример: `4827` - `token: string` (required) — Маскированный токен (видны первые 8 и последние 4 символа). Пример: `"cH5kR9mN...x7Qp"` - - `name: string` (required) — Пользовательское имя токена. Пример: `"Мой API токен"` + - `name: string` (required, nullable) — Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную. Пример: `"Мой API токен"` - `user_id: integer, int64` (required) — Идентификатор владельца токена. Пример: `12` - `scopes: array of string` (required) — Список скоупов токена. Пример: `["messages:read","chats:read"]` - `created_at: date-time` (required) — Дата создания токена. Пример: `"2025-01-15T10:30:00.000Z"` - - `revoked_at: date-time` (required) — Дата отзыва токена. Пример: `null` - - `expires_in: integer, int32` (required) — Время жизни токена в секундах. Пример: `null` - - `last_used_at: date-time` (required) — Дата последнего использования токена. Пример: `"2025-02-24T14:20:00.000Z"` + - `revoked_at: date-time` (required, nullable) — Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401. Пример: `null` + - `expires_in: integer, int32` (required, nullable) — Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно. Пример: `null` + - `last_used_at: date-time` (required, nullable) — Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать. Пример: `"2025-02-24T14:20:00.000Z"` **Пример ответа:** @@ -11780,7 +11795,7 @@ response = await client.oauth.get_token_info() Метод для создания нового чата. -Для создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](POST /messages). +Для создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](/api/messages/create). При создании чата вы автоматически становитесь участником. @@ -11891,11 +11906,11 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -11937,11 +11952,11 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -11983,11 +11998,11 @@ curl "https://api.pachca.com/api/shared/v1/chats" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12108,9 +12123,9 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -12154,11 +12169,11 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12200,11 +12215,11 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12246,11 +12261,11 @@ curl "https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12342,7 +12357,7 @@ response = await client.chats.list_chats(params=params) - `start_at: date` (required) — Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `"2025-03-20"` - `end_at: date` (required) — Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `"2025-03-20"` - `webhook_url: string` (required) — Адрес, на который будет отправлен вебхук по завершению экспорта. Пример: `"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2"` -- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.. Пример: `[1381521]` +- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов. Пример: `[1381521]` - `skip_chats_file: boolean` (default: false) — Пропуск формирования файла со списком чатов (chats.json). Пример: `false` ### Пример @@ -12384,11 +12399,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12433,11 +12448,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -12466,11 +12481,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12608,11 +12623,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/exports/22322" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12754,11 +12769,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12800,11 +12815,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -12960,11 +12975,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13006,11 +13021,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13052,11 +13067,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13082,11 +13097,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13206,11 +13221,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/archive" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13325,11 +13340,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/unarchive" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13403,39 +13418,39 @@ curl "https://api.pachca.com/api/shared/v1/profile" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** @@ -13528,7 +13543,7 @@ import { PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.profile.getProfile() -// → User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) +// → User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) ``` ### Python @@ -13539,7 +13554,7 @@ from pachca.client import PachcaClient client = PachcaClient("YOUR_TOKEN") response = await client.profile.get_profile() -# → User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) +# → User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) ``` --- @@ -13572,7 +13587,7 @@ response = await client.profile.get_profile() ```bash curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ - -F "image=@filename.png" + -F 'image=@filename.png' ``` ## Ответы @@ -13616,11 +13631,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13649,11 +13664,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -13682,11 +13697,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13779,11 +13794,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/profile/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -13812,11 +13827,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/profile/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -13876,6 +13891,8 @@ await client.profile.delete_profile_avatar() Метод для получения информации о своем статусе. +Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. + ## Пример запроса ```bash @@ -13892,9 +13909,9 @@ curl "https://api.pachca.com/api/shared/v1/profile/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** @@ -13956,7 +13973,7 @@ import { PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.profile.getStatus() -// → unknown +// → UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) ``` ### Python @@ -13967,7 +13984,7 @@ from pachca.client import PachcaClient client = PachcaClient("YOUR_TOKEN") response = await client.profile.get_status() -# → object +# → UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) ``` --- @@ -13997,7 +14014,7 @@ response = await client.profile.get_status() - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` — Режим «Нет на месте». Пример: `true` - - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.. Пример: `"Вернусь после 15:00"` + - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. Пример: `"Вернусь после 15:00"` ### Пример @@ -14039,9 +14056,9 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** @@ -14066,11 +14083,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14128,11 +14145,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/profile/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14292,7 +14309,7 @@ await client.profile.delete_status() Метод для создания нового сотрудника в вашей компании. -Вы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties). +Вы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](/api/custom-properties/list). Через параметр `chat_ids` сотрудника можно сразу добавить в указанные чаты. Чтобы создать гостя, передайте `role: "guest"` — для этой роли `chat_ids` обязателен и должен содержать ровно один активный чат, в который у токена есть право добавлять участников. При нарушении правил гостевого доступа возвращается `400` с ошибкой по полю `chat_ids`. @@ -14316,11 +14333,11 @@ await client.profile.delete_status() Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (default: false) — Деактивация пользователя. Пример: `false` - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику. Пример: `["Product","Design"]` - - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.. Пример: `[12345]` + - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат. Пример: `[12345]` - `custom_properties: array of object` — Задаваемые дополнительные поля - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `value: string` (required, max length: 768) — Устанавливаемое значение. Пример: `"Санкт-Петербург"` -- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.. Пример: `false` +- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO. Пример: `false` ### Пример @@ -14393,39 +14410,39 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** @@ -14481,11 +14498,11 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14527,11 +14544,11 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14573,11 +14590,11 @@ curl "https://api.pachca.com/api/shared/v1/users" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14625,7 +14642,7 @@ const request: UserCreateRequest = { skipEmailNotify: false } const response = client.users.createUser(request) -// → User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) +// → User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) ``` ### Python @@ -14654,7 +14671,7 @@ request = UserCreateRequest( skip_email_notify=False ) response = await client.users.create_user(request=request) -# → User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) +# → User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) ``` --- @@ -14696,45 +14713,45 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -14800,11 +14817,11 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14846,11 +14863,11 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14892,11 +14909,11 @@ curl "https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -14989,39 +15006,39 @@ curl "https://api.pachca.com/api/shared/v1/users/12" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** @@ -15093,11 +15110,11 @@ curl "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15139,11 +15156,11 @@ curl "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15174,7 +15191,7 @@ import { PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.users.getUser(12) -// → User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) +// → User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) ``` ### Python @@ -15185,7 +15202,7 @@ from pachca.client import PachcaClient client = PachcaClient("YOUR_TOKEN") response = await client.users.get_user(id=12) -# → User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) +# → User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) ``` --- @@ -15202,7 +15219,7 @@ response = await client.users.get_user(id=12) Метод для редактирования сотрудника. -Для редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties). +Для редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](/api/custom-properties/list). ## Параметры @@ -15298,39 +15315,39 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `data: object` (required) — Сотрудник - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` **Пример ответа:** @@ -15386,11 +15403,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15432,11 +15449,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15478,11 +15495,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15508,11 +15525,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15558,7 +15575,7 @@ const request: UserUpdateRequest = { } } const response = client.users.updateUser(12, request) -// → User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) +// → User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null }) ``` ### Python @@ -15585,7 +15602,7 @@ request = UserUpdateRequest( ) ) response = await client.users.update_user(id=12, request=request) -# → User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) +# → User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None) ``` --- @@ -15644,11 +15661,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15690,11 +15707,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15774,7 +15791,7 @@ await client.users.delete_user(id=12) ```bash curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ - -F "image=@filename.png" + -F 'image=@filename.png' ``` ## Ответы @@ -15818,11 +15835,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15851,11 +15868,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -15884,11 +15901,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -15914,11 +15931,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16018,11 +16035,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16051,11 +16068,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422) - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` - **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403) @@ -16084,11 +16101,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/avatar" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16145,6 +16162,8 @@ await client.users.delete_user_avatar(user_id=12) Метод для получения информации о статусе сотрудника. +Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. + ## Параметры ### Path параметры @@ -16168,9 +16187,9 @@ curl "https://api.pachca.com/api/shared/v1/users/12/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** @@ -16227,11 +16246,11 @@ curl "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16262,7 +16281,7 @@ import { PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.users.getUserStatus(12) -// → unknown +// → UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) ``` ### Python @@ -16273,7 +16292,7 @@ from pachca.client import PachcaClient client = PachcaClient("YOUR_TOKEN") response = await client.users.get_user_status(user_id=12) -# → object +# → UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) ``` --- @@ -16310,7 +16329,7 @@ response = await client.users.get_user_status(user_id=12) - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` — Режим «Нет на месте». Пример: `true` - - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.. Пример: `"Вернусь после 15:00"` + - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. Пример: `"Вернусь после 15:00"` ### Пример @@ -16352,9 +16371,9 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `data: object` (required) — Статус пользователя - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` **Пример ответа:** @@ -16379,11 +16398,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16441,11 +16460,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16471,11 +16490,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16609,11 +16628,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/users/12/status" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16735,11 +16754,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16781,11 +16800,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16827,11 +16846,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -16923,9 +16942,9 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -16955,11 +16974,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17001,11 +17020,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17047,11 +17066,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Pro - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17181,11 +17200,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17227,11 +17246,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17362,11 +17381,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17408,11 +17427,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17454,11 +17473,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17484,11 +17503,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17592,11 +17611,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17638,11 +17657,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/group_tags/9111" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17727,45 +17746,45 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -17831,11 +17850,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17877,11 +17896,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17923,11 +17942,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -17953,11 +17972,11 @@ curl "https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18074,11 +18093,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18136,11 +18155,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18166,11 +18185,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/group_tags" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18288,11 +18307,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/group_tags/86" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18373,11 +18392,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/leave" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18435,11 +18454,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/leave" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18465,11 +18484,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/leave" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18557,45 +18576,45 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -18661,11 +18680,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18723,11 +18742,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18753,11 +18772,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18881,11 +18900,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18943,11 +18962,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -18973,11 +18992,11 @@ curl "https://api.pachca.com/api/shared/v1/chats/334/members" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19037,7 +19056,7 @@ await client.members.add_members(id=334, request=request) Метод для исключения пользователя из состава участников беседы или канала. -Если пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](DELETE /chats/{id}/leave). +Если пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](/api/members/leave). ## Параметры @@ -19096,11 +19115,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19209,11 +19228,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19271,11 +19290,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19301,11 +19320,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/chats/334/members/186" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19388,10 +19407,10 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \ **Схема ответа:** - `data: object` (required) — Тред - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` **Пример ответа:** @@ -19446,11 +19465,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19525,10 +19544,10 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ **Схема ответа:** - `data: object` (required) — Тред - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` **Пример ответа:** @@ -19538,8 +19557,8 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ "data": { "id": 265142, "chat_id": 2637266155, - "message_id": 154332686, - "message_chat_id": 2637266154, + "message_id": null, + "message_chat_id": null, "updated_at": "2023-02-01T19:20:47.204Z" } } @@ -19567,11 +19586,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/threads" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19675,17 +19694,17 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 **Схема ответа:** - `data: array of object` (required) - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -19717,11 +19736,11 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19763,11 +19782,11 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19809,11 +19828,11 @@ curl "https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19907,10 +19926,10 @@ curl "https://api.pachca.com/api/shared/v1/threads/265142" \ **Схема ответа:** - `data: object` (required) — Тред - - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142` - - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155` - - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686` - - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154` + - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](/api/messages/create) в тред). Пример: `265142` + - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](/api/messages/create) в тред и получения [списка комментариев](/api/messages/list)). Пример: `2637266155` + - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686` + - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154` - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2023-02-01T19:20:47.204Z"` **Пример ответа:** @@ -19949,11 +19968,11 @@ curl "https://api.pachca.com/api/shared/v1/threads/265142" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -19995,11 +20014,11 @@ curl "https://api.pachca.com/api/shared/v1/threads/265142" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20076,22 +20095,22 @@ response = await client.threads.get_thread(id=265142) - `entity_type: string` — Тип сущности Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности. Пример: `334` - - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` + - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `files: array of object` — Прикрепляемые файлы - - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` + - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](/api/files/direct-url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `"logo.png"` - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `size: integer, int32` (required) — Размер файла в байтах, отображаемый пользователю. Пример: `12345` - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800` - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600` - - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `5400` - - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `"4,8,12,20,16,10,6,3"` - - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"},{"text":"Отлично!","data":"awesome"}]]` - - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.. Пример: `194270` - - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"https://example.com/avatar.png"` - - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"Бот Поддержки"` - - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.. Пример: `false` + - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `5400` + - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `"4,8,12,20,16,10,6,3"` + - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"},{"text":"Отлично!","data":"awesome"}]]` + - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение. Пример: `194270` + - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"https://example.com/avatar.png"` + - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"Бот Поддержки"` + - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред. Пример: `false` - `link_preview: boolean` (default: false) — Отображение предпросмотра первой найденной ссылки в тексте сообщения. Пример: `false` ### Пример @@ -20185,7 +20204,7 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -20197,29 +20216,29 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` **Пример ответа:** @@ -20288,11 +20307,11 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20334,11 +20353,11 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20380,11 +20399,11 @@ curl "https://api.pachca.com/api/shared/v1/messages" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20442,7 +20461,7 @@ const request: MessageCreateRequest = { linkPreview: false } const response = client.messages.createMessage(request) -// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null }) +// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null }) ``` ### Python @@ -20531,7 +20550,7 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -20543,35 +20562,35 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -20648,11 +20667,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20694,11 +20713,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20740,11 +20759,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20770,11 +20789,11 @@ curl "https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=de - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -20875,7 +20894,7 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -20887,29 +20906,29 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` **Пример ответа:** @@ -20994,11 +21013,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21040,11 +21059,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21075,7 +21094,7 @@ import { PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.messages.getMessage(194275) -// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null }) +// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null }) ``` ### Python @@ -21121,20 +21140,20 @@ response = await client.messages.get_message(id=194275) ### Схема - `message: object` (required) — Собранный объект параметров редактируемого сообщения - - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).. Пример: `"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет."` + - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). Пример: `"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет."` - `files: array of object` — Прикрепляемые файлы - - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` + - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](/api/files/direct-url). Пример: `"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"` - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `"logo.png"` - `file_type: string` — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `size: integer, int32` — Размер файла в байтах, отображаемый пользователю. Пример: `12345` - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800` - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600` - - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `5400` - - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `"4,8,12,20,16,10,6,3"` - - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"}]]` - - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"https://example.com/avatar.png"` - - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `"Бот Поддержки"` + - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `5400` + - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `"4,8,12,20,16,10,6,3"` + - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив. Пример: `[[{"text":"Подробнее","url":"https://example.com/details"}]]` + - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"https://example.com/avatar.png"` + - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `"Бот Поддержки"` ### Пример @@ -21215,7 +21234,7 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -21227,29 +21246,29 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` **Пример ответа:** @@ -21318,11 +21337,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21364,11 +21383,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21410,11 +21429,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21440,11 +21459,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21497,7 +21516,7 @@ const request: MessageUpdateRequest = { } } const response = client.messages.updateMessage(194275, request) -// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null }) +// → Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null }) ``` ### Python @@ -21592,11 +21611,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21638,11 +21657,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/194275" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21714,13 +21733,13 @@ await client.messages.delete_message(id=194275) ### Схема -- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении. +- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении **Структура значений Record:** - `title: string` (required) — Заголовок. Пример: `"Статья: Отправка файлов"` - `description: string` (required) — Описание. Пример: `"Пример отправки файлов на удаленный сервер"` - `image_url: string` — Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image). Пример: `"https://website.com/img/landing.png"` - `image: object` — Изображение - - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](POST /direct_url). Пример: `"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}"` + - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](/api/files/direct-url). Пример: `"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}"` - `name: string` (required) — Название изображения (рекомендуется писать вместе с расширением). Пример: `"files-to-server.jpg"` - `size: integer, int32` — Размер изображения в байтах. Пример: `695604` @@ -21775,11 +21794,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21837,11 +21856,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -21867,11 +21886,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/link_previews" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22011,11 +22030,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/messages/194275/pin" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22132,11 +22151,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/194275/pin" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22225,9 +22244,9 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -22253,11 +22272,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22299,11 +22318,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22345,11 +22364,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22375,11 +22394,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22442,7 +22461,7 @@ response = await client.read_members.list_read_members(id=194275, params=params) Метод для добавления реакции на сообщение. -Для добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](DELETE /messages/{id}/reactions). +Для добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](/api/reactions/remove). **Лимиты реакций:** @@ -22517,11 +22536,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/7231942/reactions" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22579,11 +22598,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/7231942/reactions" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22609,11 +22628,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/7231942/reactions" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22645,7 +22664,7 @@ const client = new PachcaClient("YOUR_TOKEN") const request: ReactionRequest = { code: "👍", name: ":+1:" } const response = client.reactions.addReaction(7231942, request) -// → Reaction({ userId: number, createdAt: string, code: string, name: string | null }) +// → Reaction({ userId: number, createdAt: string, code: string, name: string }) ``` ### Python @@ -22658,7 +22677,7 @@ client = PachcaClient("YOUR_TOKEN") request = ReactionRequest(code="👍", name=":+1:") response = await client.reactions.add_reaction(id=7231942, request=request) -# → Reaction(user_id: int, created_at: datetime, code: str, name: str | None) +# → Reaction(user_id: int, created_at: datetime, code: str, name: str) ``` --- @@ -22708,11 +22727,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/7231942/reactions? - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22770,11 +22789,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/7231942/reactions? - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22800,11 +22819,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/7231942/reactions? - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22897,9 +22916,9 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -22930,11 +22949,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -22992,11 +23011,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23022,11 +23041,11 @@ curl "https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23177,11 +23196,11 @@ curl "https://api.pachca.com/api/shared/v1/search/chats?query=Разработк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23223,11 +23242,11 @@ curl "https://api.pachca.com/api/shared/v1/search/chats?query=Разработк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23361,7 +23380,7 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334` - - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334` + - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334` - `content: string` (required) — Текст сообщения. Пример: `"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"` - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12` - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T15:57:23.000Z"` @@ -23373,29 +23392,29 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк - `file_type: string` (required) — Тип файла Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"` - - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920` - - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080` + - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920` + - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080` - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`. - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400` - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `"4,8,12,20,16,10,6,3"` - - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `"Привет, посмотри пожалуйста последний отчёт"` - - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок - - `thread: object` (required) — Тред сообщения + - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `"Привет, посмотри пожалуйста последний отчёт"` + - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. + - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142` - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155` - - `forwarding: object` (required) — Информация о пересланном сообщении + - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным. - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275` - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334` - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12` - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-15T10:30:00.000Z"` - - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null` - - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null` - - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null` - - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null` - - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2021-08-28T16:10:00.000Z"` - - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null` + - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null` + - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null` + - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null` + - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null` + - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `"2021-08-28T16:10:00.000Z"` + - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null` - `meta: object` (required) — Мета-информация для пагинации поисковых результатов - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42` - `paginate: object` (required) — Вспомогательная информация @@ -23474,11 +23493,11 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23520,11 +23539,11 @@ curl "https://api.pachca.com/api/shared/v1/search/messages?query=футболк - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23655,39 +23674,39 @@ curl "https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10& - `data: array of object` (required) - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12` - - `first_name: string` (required, max length: 255) — Имя. Пример: `"Олег"` - - `last_name: string` (required, max length: 255) — Фамилия. Пример: `"Петров"` + - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `"Олег"` + - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `"Петров"` - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `"olegpetrov"` - - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"olegp@example.com"` - - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `"+79001234567"` - - `department: string` (required, max length: 255) — Департамент. Пример: `"Продукт"` - - `title: string` (required) — Должность. Пример: `"CIO"` + - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"olegp@example.com"` + - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `"+79001234567"` + - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `"Продукт"` + - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `"CIO"` - `role: string` (required) — Уровень доступа Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false` - `invite_status: string` (required) — Статус приглашения Значения: `confirmed` — Принято, `sent` — Отправлено - - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185` + - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185` - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `["Product","Design"]` - `custom_properties: array of object` (required) — Дополнительные поля сотрудника - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678` - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` - - `user_status: object` (required) — Статус + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` + - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус. - `emoji: string` (required) — Emoji символ статуса. Пример: `"🎮"` - `title: string` (required, max length: 50) — Текст статуса. Пример: `"Очень занят"` - - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2024-04-08T10:00:00.000Z"` + - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `"2024-04-08T10:00:00.000Z"` - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false` - - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov."` - `bot: boolean` (required) — Является ботом. Пример: `false` - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false` - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-08T09:32:57.000Z"` - - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-01-20T13:40:07.000Z"` - - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `"Europe/Moscow"` - - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `"https://app.pachca.com/users/12/photo.jpg"` + - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `"2025-01-20T13:40:07.000Z"` + - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `"Europe/Moscow"` + - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `"https://app.pachca.com/users/12/photo.jpg"` - `meta: object` (required) — Мета-информация для пагинации поисковых результатов - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42` - `paginate: object` (required) — Вспомогательная информация @@ -23755,11 +23774,11 @@ curl "https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10& - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23801,11 +23820,11 @@ curl "https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10& - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -23906,7 +23925,7 @@ response = await client.search.search_users(params=params) У напоминания должны быть ответственные, если их не указывать - ответственным назначается вы. -Ответственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](GET /users). +Ответственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](/api/users/list). Напоминание можно привязать к чату, указав `chat_id`. Для привязки к чату необходимо быть его участником. @@ -23922,8 +23941,8 @@ response = await client.search.search_users(params=params) - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` — Описание (по умолчанию — название типа). Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).. Пример: `"2020-06-05T12:00:00.000+03:00"` - - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно).. Пример: `2` + - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени). Пример: `"2020-06-05T12:00:00.000+03:00"` + - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно). Пример: `2` - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы). Пример: `[12,13]` - `chat_id: integer, int32` — Идентификатор чата, к которому привязывается напоминание. Пример: `456` - `all_day: boolean` — Напоминание на весь день (без указания времени). Пример: `false` @@ -23995,10 +24014,10 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -24009,7 +24028,7 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` **Пример ответа:** @@ -24047,11 +24066,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24093,11 +24112,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24139,11 +24158,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24169,11 +24188,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24216,7 +24235,7 @@ const request: TaskCreateRequest = { } } const response = client.tasks.createTask(request) -// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] }) +// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] }) ``` ### Python @@ -24240,7 +24259,7 @@ request = TaskCreateRequest( ) ) response = await client.tasks.create_task(request=request) -# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)]) +# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)]) ``` --- @@ -24284,10 +24303,10 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -24298,13 +24317,13 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -24352,11 +24371,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24398,11 +24417,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24506,10 +24525,10 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -24520,7 +24539,7 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` **Пример ответа:** @@ -24574,11 +24593,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24620,11 +24639,11 @@ curl "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24655,7 +24674,7 @@ import { PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.tasks.getTask(22283) -// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] }) +// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] }) ``` ### Python @@ -24666,7 +24685,7 @@ from pachca.client import PachcaClient client = PachcaClient("YOUR_TOKEN") response = await client.tasks.get_task(id=22283) -# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)]) +# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)]) ``` --- @@ -24704,8 +24723,8 @@ response = await client.tasks.get_task(id=22283) - `kind: string` — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).. Пример: `"2020-06-05T12:00:00.000+03:00"` - - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно).. Пример: `2` + - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени). Пример: `"2020-06-05T12:00:00.000+03:00"` + - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно). Пример: `2` - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные». Пример: `[12]` - `status: string` — Статус Значения: `done` — Выполнено, `undone` — Активно @@ -24777,10 +24796,10 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `kind: string` (required) — Тип Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо - `content: string` (required) — Описание. Пример: `"Забрать со склада 21 заказ"` - - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-05T09:00:00.000Z"` + - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `"2020-06-05T09:00:00.000Z"` - `priority: integer, int32` (required) — Приоритет. Пример: `2` - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12` - - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334` - `status: string` (required) — Статус напоминания Значения: `done` — Выполнено, `undone` — Активно - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2020-06-04T10:37:57.000Z"` @@ -24791,7 +24810,7 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `name: string` (required, max length: 32) — Название поля. Пример: `"Город"` - `data_type: string` (required) — Тип поля Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка - - `value: string` (required, max length: 768) — Значение. Пример: `"Санкт-Петербург"` + - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `"Санкт-Петербург"` **Пример ответа:** @@ -24829,11 +24848,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24875,11 +24894,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24921,11 +24940,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24951,11 +24970,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -24999,7 +25018,7 @@ const request: TaskUpdateRequest = { } } const response = client.tasks.updateTask(22283, request) -// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] }) +// → Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] }) ``` ### Python @@ -25024,7 +25043,7 @@ request = TaskUpdateRequest( ) ) response = await client.tasks.update_task(id=22283, request=request) -# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)]) +# → Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)]) ``` --- @@ -25083,11 +25102,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25129,11 +25148,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/tasks/22283" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25205,11 +25224,11 @@ await client.tasks.delete_task(id=22283) - `type: string` (required) — Способ открытия представления. Пример: `"modal"` Значения: `modal` — Модальное окно - `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки). Пример: `"791a056b-006c-49dd-834b-c633fde52fe8"` -- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.. Пример: `"{"timeoff_id":4378}"` -- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.. Пример: `"timeoff_reguest_form"` +- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. Пример: `"{\"timeoff_id\":4378}"` +- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. Пример: `"timeoff_request_form"` - `view: object` (required) — Собранный объект представления - `title: string` (required, max length: 24) — Заголовок представления. Пример: `"Уведомление об отпуске"` - - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.. Пример: `"Закрыть"` + - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. Пример: `"Закрыть"` - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы. Пример: `"Отправить заявку"` - `blocks: array (union)` (required, max items: 100) — Массив блоков представления **Возможные типы элементов:** @@ -25298,7 +25317,7 @@ await client.tasks.delete_task(id=22283) - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения - `label: string` (required, max length: 150) — Подпись к полю - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, ["png","jpg","gif"]). Если это поле не указано, все расширения файлов будут приняты. - - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле. + - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле - `required: boolean` (default: false) — Обязательность - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом @@ -25309,7 +25328,7 @@ await client.tasks.delete_task(id=22283) "type": "modal", "trigger_id": "791a056b-006c-49dd-834b-c633fde52fe8", "private_metadata": "{\"timeoff_id\":4378}", - "callback_id": "timeoff_reguest_form", + "callback_id": "timeoff_request_form", "view": { "title": "Уведомление об отпуске", "close_text": "Закрыть", @@ -25427,7 +25446,7 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ "type": "modal", "trigger_id": "791a056b-006c-49dd-834b-c633fde52fe8", "private_metadata": "{\"timeoff_id\":4378}", - "callback_id": "timeoff_reguest_form", + "callback_id": "timeoff_request_form", "view": { "title": "Уведомление об отпуске", "close_text": "Закрыть", @@ -25545,11 +25564,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25591,11 +25610,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25637,11 +25656,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25667,11 +25686,11 @@ curl "https://api.pachca.com/api/shared/v1/views/open" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25705,7 +25724,7 @@ const request: OpenViewRequest = { type: "modal", triggerId: "791a056b-006c-49dd-834b-c633fde52fe8", privateMetadata: "{\"timeoff_id\":4378}", - callbackId: "timeoff_reguest_form", + callbackId: "timeoff_request_form", view: { title: "Уведомление об отпуске", closeText: "Закрыть", @@ -25728,7 +25747,7 @@ request = OpenViewRequest( type="modal", trigger_id="791a056b-006c-49dd-834b-c633fde52fe8", private_metadata="{\"timeoff_id\":4378}", - callback_id="timeoff_reguest_form", + callback_id="timeoff_request_form", view=OpenViewRequestView( title="Уведомление об отпуске", close_text="Закрыть", @@ -25775,24 +25794,24 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bot/recreate_token" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `"bm90X2FfcmVhbF90b2tlbg"` + - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `"bm90X2FfcmVhbF90b2tlbg"` **Пример ответа:** @@ -25853,11 +25872,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bot/recreate_token" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25899,11 +25918,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bot/recreate_token" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -25971,7 +25990,7 @@ response = await client.bots.self_recreate_bot_token() ### Схема - `webhook: object` (required) — Объект параметров вебхука - - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук.. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук. Пример: `"https://www.website.com/tasks/new"` ### Пример @@ -26007,21 +26026,21 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости @@ -26067,11 +26086,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26113,11 +26132,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26159,11 +26178,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bot/webhook" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26253,29 +26272,29 @@ curl "https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -26314,10 +26333,7 @@ curl "https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1" \ ], "meta": { "paginate": { - "next_page": "eyJxZCO2MiwiZGlyIjomSNYjIn3", - "prev_page": "eyJxZCO2MiwiZGlyIjoiYXNjIn0", - "has_next": true, - "has_prev": false + "next_page": "eyJpZCI6MTczODgxNn0" } } } @@ -26345,11 +26361,11 @@ curl "https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26446,13 +26462,13 @@ response = await client.bots.list_bots(params=params) - `webhook: object` (required) — Объект параметров вебхука создаваемого бота - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.. Пример: `"tasks_bot"` + - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`. Пример: `"tasks_bot"` - `outgoing_url: string` — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.. Пример: `["/task","/help"]` - - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.. Пример: `["messages:create"]` + - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов. Пример: `["/task","/help"]` + - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя. Пример: `["messages:create"]` - `template: string` — Шаблон форматирования входящего вебхука. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики @@ -26462,8 +26478,8 @@ response = await client.bots.list_bots(params=params) - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - `who_can_add: string` — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` - - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.. Пример: `false` + - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` + - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется. Пример: `false` ### Пример @@ -26476,17 +26492,12 @@ response = await client.bots.list_bots(params=params) "events": [ "message_new" ], + "trigger_on": "commands", "commands": [ - "/task", - "/help" + "/task" ], "scopes": [ "messages:create" - ], - "template": "Заказ от {{ client }} на сумму {{ amount }} ₽", - "challenge_key": "challenge", - "can_edit": [ - "admin" ] } } @@ -26506,17 +26517,12 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ "events": [ "message_new" ], + "trigger_on": "commands", "commands": [ - "/task", - "/help" + "/task" ], "scopes": [ "messages:create" - ], - "template": "Заказ от {{ client }} на сумму {{ amount }} ₽", - "challenge_key": "challenge", - "can_edit": [ - "admin" ] } }' @@ -26533,24 +26539,24 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `"bm90X2FfcmVhbF90b2tlbg"` + - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `"bm90X2FfcmVhbF90b2tlbg"` **Пример ответа:** @@ -26595,11 +26601,11 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26641,11 +26647,11 @@ curl "https://api.pachca.com/api/shared/v1/bots" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26786,21 +26792,21 @@ curl "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости @@ -26862,11 +26868,11 @@ curl "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26908,11 +26914,11 @@ curl "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -26992,13 +26998,13 @@ response = await client.bots.get_bot(id=1738816) - `webhook: object` (required) — Объект параметров вебхука редактируемого бота - `name: string` (max length: 255) — Имя бота. Пример: `"Бот задач"` - - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.. Пример: `"tasks_bot"` + - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`. Пример: `"tasks_bot"` - `outgoing_url: string` — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.. Пример: `["/task","/help"]` - - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.. Пример: `["messages:create"]` + - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов. Пример: `["/task","/help"]` + - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя. Пример: `["messages:create"]` - `template: string` — Шаблон форматирования входящего вебхука. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики @@ -27008,7 +27014,7 @@ response = await client.bots.get_bot(id=1738816) - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - `who_can_add: string` — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` ### Пример @@ -27078,21 +27084,21 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости @@ -27138,11 +27144,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27184,11 +27190,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27230,11 +27236,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27260,11 +27266,11 @@ curl -X PUT "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27406,11 +27412,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27452,11 +27458,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/bots/1738816" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27540,24 +27546,24 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token" - `webhook: object` (required) — Объект параметров вебхука - `name: string` (required, max length: 255) — Имя бота. Пример: `"Бот задач"` - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `"tasks_bot"` - - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `"https://www.website.com/tasks/new"` + - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `"https://www.website.com/tasks/new"` - `events: array of string` (required) — События, на которые подписан бот. Пример: `["message_new"]` - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews) - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `["/task"]` - - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `["messages:create"]` - - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` + - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `["messages:create"]` + - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `"Заказ от {{ client }} на сумму {{ amount }} ₽"` - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики - - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `"challenge"` + - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `"challenge"` - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true` - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false` - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false` - - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false` - - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `["admin"]` + - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false` + - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `["admin"]` - `who_can_add: string` (required) — Кто может добавлять бота в чаты Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости - - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `"bm90X2FfcmVhbF90b2tlbg"` + - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `"bm90X2FfcmVhbF90b2tlbg"` **Пример ответа:** @@ -27618,11 +27624,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token" - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27664,11 +27670,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token" - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27773,8 +27779,8 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `url: string` (required) — Прямая ссылка на сообщение. Пример: `"https://pachca.com/chats/1245817/messages/5678"` - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012` - - `parent_message_id: integer, int32` — Идентификатор сообщения, к которому написан ответ. Пример: `3456` - - `thread: object` — Объект с параметрами треда + - `parent_message_id: integer, int32` (nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `3456` + - `thread: object` — Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение. - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -27783,12 +27789,12 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ Значения: `reaction` — Для реакций всегда reaction - `event: string` (required) — Тип события Значения: `new` — Создание, `delete` — Удаление - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.. Пример: `9012` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`. Пример: `9012` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817` - `code: string` (required) — Emoji символ реакции. Пример: `"👍"` - `name: string` (required) — Название реакции. Пример: `"thumbsup"` - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345` - - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.. Пример: `"2025-05-15T14:30:00.000Z"` + - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - **ButtonWebhookPayload**: Структура исходящего вебхука о нажатии кнопки - `type: string` (required) — Тип объекта. Пример: `"button"` @@ -27806,11 +27812,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ Значения: `view` — Для формы всегда view - `event: string` (required) — Тип события. Пример: `"submit"` Значения: `submit` — Отправка формы - - `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `"timeoff_request_form"` - - `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `"{'timeoff_id':4378}"` - - `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012` + - `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `"timeoff_request_form"` + - `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `"{\"timeoff_id\":4378}"` + - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012` - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523` - - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные + - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. **Структура значений Record:** - Тип значения: `any` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544` @@ -27820,7 +27826,7 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `event: string` (required) — Тип события Значения: `add` — Добавление, `remove` — Удаление - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012` - - `thread_id: integer, int32` — Идентификатор треда. Пример: `5678` + - `thread_id: integer, int32` (nullable) — Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. Пример: `5678` - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]` - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` @@ -27859,25 +27865,25 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890` - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092` - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438` - - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.. Пример: `"2025-05-15T14:30:00.000Z"` - - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.. Пример: `"2025-05-15T14:45:00.000Z"` - - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.. Пример: `900` + - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished. Пример: `"2025-05-15T14:30:00.000Z"` + - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished. Пример: `"2025-05-15T14:45:00.000Z"` + - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи. Пример: `900` - `members: array of object` — Список участников звонка. Присутствует для события finished. - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345` - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.. Пример: `"2025-05-15T14:45:00.000Z"` - - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready.. Пример: `4567` - - `file_id: integer, int32` — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.. Пример: `89012` - - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready.. Пример: `"https://api.pachca.com/files/89012"` - - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready.. Пример: `10485760` + - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка. Пример: `"2025-05-15T14:45:00.000Z"` + - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready. Пример: `4567` + - `file_id: integer, int32` (nullable) — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан. Пример: `89012` + - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready. Пример: `"https://api.pachca.com/files/89012"` + - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready. Пример: `10485760` - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400` - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `"2025-05-15T14:30:00.000Z"` - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -27925,11 +27931,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -27971,11 +27977,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28017,11 +28023,11 @@ curl "https://api.pachca.com/api/shared/v1/webhooks/events?limit=1" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28126,11 +28132,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/webhooks/events/01KAJZ2XDSS - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28172,11 +28178,11 @@ curl -X DELETE "https://api.pachca.com/api/shared/v1/webhooks/events/01KAJZ2XDSS - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28242,7 +28248,7 @@ await client.bots.delete_webhook_event(id="01KAJZ2XDSS2S3DSW9EXJZ0TBV") ### Query параметры - `start_time: date-time` — Начальная метка времени (включительно) -- `end_time: date-time` — Конечная метка времени (исключительно) +- `end_time: date-time` — Конечная метка времени (включительно) - `event_key: string` — Фильтр по конкретному типу события Значения: `user_login`, `user_logout`, `user_2fa_fail`, `user_2fa_success`, `user_created`, `user_deleted`, `user_role_changed`, `user_updated`, `tag_created`, `tag_deleted`, `user_added_to_tag`, `user_removed_from_tag`, `chat_created`, `chat_renamed`, `chat_permission_changed`, `user_chat_join`, `user_chat_leave`, `tag_added_to_chat`, `tag_removed_from_chat`, `message_updated`, `message_deleted`, `message_created`, `reaction_created`, `reaction_deleted`, `thread_created`, `access_token_created`, `access_token_updated`, `access_token_destroy`, `kms_encrypt`, `kms_decrypt`, `audit_events_accessed`, `dlp_violation_detected`, `search_users_api`, `search_chats_api`, `search_messages_api`, `bot_scopes_updated`, `bot_webhook_settings_updated`, `bot_token_recreated`, `bot_deleted`, `video_call_started`, `video_call_finished`, `video_call_recording_ready` - `actor_id: string` — Идентификатор пользователя, выполнившего действие @@ -28257,7 +28263,7 @@ await client.bots.delete_webhook_event(id="01KAJZ2XDSS2S3DSW9EXJZ0TBV") ```bash # Для получения следующей страницы используйте cursor из meta.paginate.next_page -curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09:11:00Z&end_time=2025-05-02T09:11:00Z&event_key=user_login&actor_id=98765&actor_type=User&entity_id=98765&entity_type=User&limit=1" \ +curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09:11:00.000Z&end_time=2025-05-02T09:11:00.000Z&event_key=user_login&actor_id=98765&actor_type=User&entity_id=98765&entity_type=User&limit=1" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` @@ -28276,10 +28282,10 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `entity_type: string` (required) — Тип затронутой сущности. Пример: `"User"` - `actor_id: string` (required) — Идентификатор пользователя, выполнившего действие. Пример: `"98765"` - `actor_type: string` (required) — Тип актора. Пример: `"User"` - - `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект + - `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект. **Возможные варианты:** - - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted + - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted. - **AuditDetailsUserUpdated**: При: user_updated - `changed_attrs: array of string` (required) — Список изменённых полей - **AuditDetailsRoleChanged**: При: user_role_changed @@ -28314,21 +28320,21 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `message_id: integer, int32` (required) — Идентификатор сообщения - `chat_id: integer, int32` (required) — Идентификатор чата - `user_id: integer, int32` (required) — Идентификатор пользователя - - `action_message: string` (required) — Описание действия. `null`, если у действия правила текст не задан. + - `action_message: string` (required, nullable) — Описание действия. `null`, если у действия правила текст не задан. - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали) - **AuditDetailsSearch**: При: search_users_api, search_chats_api, search_messages_api - `search_type: string` (required) — Тип поиска - `query_present: boolean` (required) — Указан ли поисковый запрос - `cursor_present: boolean` (required) — Использован ли курсор - `limit: integer, int32` (required) — Количество возвращённых результатов - - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages) + - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsBotScopes**: При: bot_scopes_updated - `added_scopes: array of string` (required) — Скоупы, добавленные токену бота - `removed_scopes: array of string` (required) — Скоупы, отозванные у токена бота - **AuditDetailsBotWebhookSettings**: При: bot_webhook_settings_updated - - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение) + - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение). **Структура значений Record:** - Тип значения: `any` - **AuditDetailsVideoCall**: При: video_call_started, video_call_finished @@ -28344,9 +28350,9 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `meta: object` (required) — Метаданные пагинации - `paginate: object` (required) — Вспомогательная информация - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `"eyJxZCO2MiwiZGlyIjomSNYjIn3"` - - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` - - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true` - - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false` + - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `"eyJxZCO2MiwiZGlyIjoiYXNjIn0"` + - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true` + - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false` **Пример ответа:** @@ -28383,11 +28389,11 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28429,11 +28435,11 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28475,11 +28481,11 @@ curl "https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09 - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28510,8 +28516,8 @@ import { AuditEventKey, PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.security.getAuditEvents({ - startTime: "2025-05-01T09:11:00Z", - endTime: "2025-05-02T09:11:00Z", + startTime: "2025-05-01T09:11:00.000Z", + endTime: "2025-05-02T09:11:00.000Z", eventKey: AuditEventKey.UserLogin, actorId: "98765", actorType: "User", @@ -28532,8 +28538,8 @@ from pachca.models import AuditEventKey, GetAuditEventsParams client = PachcaClient("YOUR_TOKEN") params = GetAuditEventsParams( - start_time=datetime.fromisoformat("2025-05-01T09:11:00Z"), - end_time=datetime.fromisoformat("2025-05-02T09:11:00Z"), + start_time=datetime.fromisoformat("2025-05-01T09:11:00.000Z"), + end_time=datetime.fromisoformat("2025-05-02T09:11:00.000Z"), event_key=AuditEventKey.USER_LOGIN, actor_id="98765", actor_type="User", @@ -28613,11 +28619,11 @@ curl "https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28659,11 +28665,11 @@ curl "https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28705,11 +28711,11 @@ curl "https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` @@ -28770,7 +28776,7 @@ response = await client.custom_properties.list_properties(params=params) > Авторизация не требуется -Загрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](POST /uploads). +Загрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](/api/files/uploads). ## Тело запроса @@ -28780,14 +28786,14 @@ response = await client.custom_properties.list_properties(params=params) ### Схема -- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) -- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads) +- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) +- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](/api/files/uploads) - `file: binary` (required) — Файл для загрузки @@ -28796,15 +28802,15 @@ response = await client.custom_properties.list_properties(params=params) ```bash # URL получается из ответа POST /uploads (поле direct_url) curl "$DIRECT_URL" \ - -F "Content-Disposition=attachment" \ - -F "acl=private" \ - -F "policy=eyJloNBpcmF0aW9u..." \ - -F "x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request" \ - -F "x-amz-algorithm=AWS4-HMAC-SHA256" \ - -F "x-amz-date=20211122T065734Z" \ - -F "x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475" \ - -F "key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/$filename" \ - -F "file=@filename.png" + -F 'Content-Disposition=attachment' \ + -F 'acl=private' \ + -F 'policy=eyJloNBpcmF0aW9u...' \ + -F 'x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request' \ + -F 'x-amz-algorithm=AWS4-HMAC-SHA256' \ + -F 'x-amz-date=20211122T065734Z' \ + -F 'x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475' \ + -F 'key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}' \ + -F 'file=@filename.png' ``` ## Ответы @@ -28934,11 +28940,11 @@ curl -X POST "https://api.pachca.com/api/shared/v1/uploads" \ - `errors: array of object` (required) — Массив ошибок - `key: string` (required) — Ключ поля с ошибкой. Пример: `"field.name"` - - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `"invalid_value"` + - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `"invalid_value"` - `message: string` (required) — Сообщение об ошибке. Пример: `"Поле не может быть пустым"` - `code: string` (required) — Код ошибки Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде - - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` + - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null` **Структура значений Record:** - Тип значения: `any` diff --git a/apps/docs/public/llms.txt b/apps/docs/public/llms.txt index 8059f3082..068bb91b0 100644 --- a/apps/docs/public/llms.txt +++ b/apps/docs/public/llms.txt @@ -6,7 +6,7 @@ > **Как агенту читать эту доку:** любую страницу можно получить в Markdown — добавь `.md` к URL или пошли заголовок `Accept: text/markdown`. Ссылки в разделах «Частые задачи», «Руководства» и «API-методы» уже ведут на `.md` — запрашивай напрямую. Точечные запросы по API без загрузки всего: `npx -y @pachca/cli api ls`, далее `npx -y @pachca/cli api <МЕТОД> <путь> --describe` (схема — `--spec`, полный референс — `--docs`). -> Полная документация одним файлом: [llms-full.txt](https://dev.pachca.com/llms-full.txt) (~401K токенов — обычно не помещается в контекст целиком). +> Полная документация одним файлом: [llms-full.txt](https://dev.pachca.com/llms-full.txt) (~410K токенов — обычно не помещается в контекст целиком). > English-only: [llms-en.txt](https://dev.pachca.com/llms-en.txt) (~13K токенов). @@ -53,8 +53,8 @@ | Agent Skills | Скиллы для AI-агентов и установка | 105–128 | | Руководства | Страницы-руководства (Markdown по `.md`) | 129–189 | | API-методы | Все эндпоинты, сгруппированы по разделам | 190–300 | -| Обновления | Журнал обновлений по датам | 301–356 | -| Дополнительно | Прочие ссылки и контакты | 357–365 | +| Обновления | Журнал обновлений по датам | 301–357 | +| Дополнительно | Прочие ссылки и контакты | 358–366 | ## CLI Quick Start @@ -127,7 +127,7 @@ C#: new PachcaClient("TOKEN") → await client.Messages.CreateMessage Каталог API (RFC 9727): `https://dev.pachca.com/.well-known/api-catalog` — один JSON со всеми описаниями (OpenAPI, Postman, Arazzo), доками (HTML, llms.txt) и метаданными. ## Руководства -- [Обзор](https://dev.pachca.com/.md): Пачка для разработчиков: REST API, CLI, SDK для TypeScript, Python, Go, Kotlin, Swift и C#, расширение для n8n и Agent Skills для AI-агентов +- [Обзор](https://dev.pachca.com/index.md): Пачка для разработчиков: REST API, CLI, SDK для TypeScript, Python, Go, Kotlin, Swift и C#, расширение для n8n и Agent Skills для AI-агентов - [Быстрый старт](https://dev.pachca.com/guides/quickstart.md): Первый запрос к API Пачки за 5 минут: получение персонального токена, проверка авторизации и отправка сообщения через cURL, Postman или официальный CLI - [AI агенты, Обзор](https://dev.pachca.com/guides/ai-agents/overview.md): Готовность Пачки к AI-агентам: агент как участник тредов и способы подключения — llms.txt, CLI как основной путь, Agent Skills, OpenAPI, Arazzo, Context7 - [AI агенты, Взаимодействие с агентом](https://dev.pachca.com/guides/ai-agents/interaction.md): Как агент в Пачке получает события через вебхук, собирает контекст треда, выполняет действия и отвечает. Реакция-индикатор и таймер agent-thinking @@ -299,6 +299,7 @@ C#: new PachcaClient("TOKEN") → await client.Messages.CreateMessage - [Получение подписи, ключа и других параметров](https://dev.pachca.com/api/files/uploads.md): POST /uploads ## Обновления +- [28 июля 2026 — Уточнения в описании API](https://dev.pachca.com/updates/2026-07-28.md) - [24 июля 2026 — Самостоятельные треды и аудит видеозвонков](https://dev.pachca.com/updates/2026-07-24.md) - [07 июля 2026 — Список и удаление ботов, права доступа бота, вебхуки видеозвонков](https://dev.pachca.com/updates/2026-07-07.md) - [24 июня 2026 — Ротация токена бота и новые настройки вебхука](https://dev.pachca.com/updates/2026-06-24.md) diff --git a/apps/docs/public/pachca.postman_collection.json b/apps/docs/public/pachca.postman_collection.json index edad8215f..8d94f94f2 100644 --- a/apps/docs/public/pachca.postman_collection.json +++ b/apps/docs/public/pachca.postman_collection.json @@ -1704,7 +1704,7 @@ }, "body": { "mode": "raw", - "raw": "{\n \"type\": \"modal\",\n \"trigger_id\": \"791a056b-006c-49dd-834b-c633fde52fe8\",\n \"private_metadata\": \"{\\\"timeoff_id\\\":4378}\",\n \"callback_id\": \"timeoff_reguest_form\",\n \"view\": {\n \"title\": \"Уведомление об отпуске\",\n \"close_text\": \"Закрыть\",\n \"submit_text\": \"Отправить заявку\",\n \"blocks\": [\n {\n \"type\": \"header\",\n \"text\": \"Основная информация\"\n },\n {\n \"type\": \"plain_text\",\n \"text\": \"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"\n },\n {\n \"type\": \"markdown\",\n \"text\": \"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"\n },\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"input\",\n \"name\": \"info\",\n \"label\": \"Описание отпуска\",\n \"placeholder\": \"Куда собираетесь и что будете делать\",\n \"multiline\": true,\n \"initial_value\": \"Начальный текст\",\n \"min_length\": 10,\n \"max_length\": 500,\n \"required\": true,\n \"hint\": \"Возможно вам подскаджут, какие места лучше посетить\"\n },\n {\n \"type\": \"select\",\n \"name\": \"team\",\n \"label\": \"Выберите команду\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"selected\": true\n }\n ],\n \"hint\": \"Выберите одну из команд\"\n },\n {\n \"type\": \"radio\",\n \"name\": \"accessibility\",\n \"label\": \"Доступность\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"selected\": true\n }\n ],\n \"required\": true,\n \"hint\": \"Если вы не планируете выходить на связь, то выберите вариант Ничего\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \"newsletters\",\n \"label\": \"Рассылки\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"checked\": true\n }\n ],\n \"hint\": \"Выберите интересующие вас рассылки\"\n },\n {\n \"type\": \"date\",\n \"name\": \"date_start\",\n \"label\": \"Дата начала отпуска\",\n \"initial_date\": \"2025-07-01\",\n \"required\": true,\n \"hint\": \"Укажите дату начала отпуска\"\n },\n {\n \"type\": \"time\",\n \"name\": \"newsletter_time\",\n \"label\": \"Время рассылки\",\n \"initial_time\": \"11:00\",\n \"hint\": \"Укажите, в какое время присылать выбранные рассылки\"\n },\n {\n \"type\": \"file_input\",\n \"name\": \"request_doc\",\n \"label\": \"Заявление\",\n \"filetypes\": [\n \"pdf\",\n \"jpg\",\n \"png\"\n ],\n \"max_files\": 1,\n \"required\": true,\n \"hint\": \"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"\n }\n ]\n }\n}", + "raw": "{\n \"type\": \"modal\",\n \"trigger_id\": \"791a056b-006c-49dd-834b-c633fde52fe8\",\n \"private_metadata\": \"{\\\"timeoff_id\\\":4378}\",\n \"callback_id\": \"timeoff_request_form\",\n \"view\": {\n \"title\": \"Уведомление об отпуске\",\n \"close_text\": \"Закрыть\",\n \"submit_text\": \"Отправить заявку\",\n \"blocks\": [\n {\n \"type\": \"header\",\n \"text\": \"Основная информация\"\n },\n {\n \"type\": \"plain_text\",\n \"text\": \"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"\n },\n {\n \"type\": \"markdown\",\n \"text\": \"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"\n },\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"input\",\n \"name\": \"info\",\n \"label\": \"Описание отпуска\",\n \"placeholder\": \"Куда собираетесь и что будете делать\",\n \"multiline\": true,\n \"initial_value\": \"Начальный текст\",\n \"min_length\": 10,\n \"max_length\": 500,\n \"required\": true,\n \"hint\": \"Возможно вам подскаджут, какие места лучше посетить\"\n },\n {\n \"type\": \"select\",\n \"name\": \"team\",\n \"label\": \"Выберите команду\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"selected\": true\n }\n ],\n \"hint\": \"Выберите одну из команд\"\n },\n {\n \"type\": \"radio\",\n \"name\": \"accessibility\",\n \"label\": \"Доступность\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"selected\": true\n }\n ],\n \"required\": true,\n \"hint\": \"Если вы не планируете выходить на связь, то выберите вариант Ничего\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \"newsletters\",\n \"label\": \"Рассылки\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"checked\": true\n }\n ],\n \"hint\": \"Выберите интересующие вас рассылки\"\n },\n {\n \"type\": \"date\",\n \"name\": \"date_start\",\n \"label\": \"Дата начала отпуска\",\n \"initial_date\": \"2025-07-01\",\n \"required\": true,\n \"hint\": \"Укажите дату начала отпуска\"\n },\n {\n \"type\": \"time\",\n \"name\": \"newsletter_time\",\n \"label\": \"Время рассылки\",\n \"initial_time\": \"11:00\",\n \"hint\": \"Укажите, в какое время присылать выбранные рассылки\"\n },\n {\n \"type\": \"file_input\",\n \"name\": \"request_doc\",\n \"label\": \"Заявление\",\n \"filetypes\": [\n \"pdf\",\n \"jpg\",\n \"png\"\n ],\n \"max_files\": 1,\n \"required\": true,\n \"hint\": \"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"\n }\n ]\n }\n}", "options": { "raw": { "language": "json" @@ -1803,7 +1803,7 @@ }, "body": { "mode": "raw", - "raw": "{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"commands\": [\n \"/task\",\n \"/help\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"challenge_key\": \"challenge\",\n \"can_edit\": [\n \"admin\"\n ]\n }\n}", + "raw": "{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ]\n }\n}", "options": { "raw": { "language": "json" diff --git a/apps/docs/public/updates.md b/apps/docs/public/updates.md index ba241836d..8127a80ad 100644 --- a/apps/docs/public/updates.md +++ b/apps/docs/public/updates.md @@ -6,17 +6,79 @@ ## ☀️ Лето 2026 +### Уточнения в описании API + +_28 июля 2026_ + +Подробнее описали поведение нескольких методов и полей. Работа API не менялась. + +Были уточнены следующие методы: + +- [Журнал аудита](/api/security/list) — параметр `end_time` включает верхнюю + границу: выборка за период захватывает событие, попавшее ровно на неё. +- [Мой статус](/api/profile/get-status) и [Статус сотрудника](/api/users/get-status) + — если статус не установлен, метод отвечает `200` и телом `null`. + +Уточнены описания полей моделей: + +- У 32 полей описано, в каком случае приходит `null`. Например, + `last_activity_at` пуст, пока сотрудник ни разу не заходил в Пачку. +- `display_avatar_url` и `display_name` приходят только у сообщений от ботов. +- `name` у реакции заполнено всегда. +- `last_name`, `department` и `title` у незаполненного значения приходят как + `null` либо как пустая строка. +- `first_name` приходит как `null`, пока приглашённый сотрудник не завершил + регистрацию, то есть пока `invite_status` равен `sent`. +- `value` у дополнительного поля приходит как `null`, если поле не заполнено. + Число передаётся строкой, дата — в формате ISO 8601. + +### SDK v1.0.28 + +- Поле `details` в журнале аудита (`GET /audit_events`) читается во всех языках +- Ошибки API разбираются в типизированный `ApiError`: поле `payload` принимает вложенный объект +- Python: блоки представлений (`ViewBlockUnion`) не теряют данные +- Примеры из README компилируются +- Union без общего поля-дискриминатора разбирается по составу полей. В Go у такого union появилось поле `Raw` с исходным JSON +- `first_name` у сотрудника, `value` у дополнительного поля, `display_avatar_url` и `display_name` у сообщения стали опциональными +- `Reaction.name` больше не nullable +- У 32 полей описано, когда API возвращает `null`; исправлены примеры `callback_id` и `private_metadata` для форм + +### Generator v1.1.10 + +- Эмиттеры Go, C#, Swift, Kotlin и Python умеют union без дискриминатора — вариант выбирается по составу полей +- Дискриминатор union определяется по всем членам сразу: поле принимается, только если литерал есть у каждого +- Открытый `additionalProperties` даёт значение произвольного типа, а не строку. В Kotlin для него используется `JsonElement` + +### CLI v2026.7.2 + +- `files direct-url`: файл добавляется в форму последним +- `files direct-url` не падает при успешной загрузке +- Явный `--profile` не перебивается переменной `PACHCA_TOKEN` +- Запись больше не повторяется автоматически при 503 +- `chats download-export`: имя файла из `Content-Disposition` не уводит запись за пределы указанной папки +- `-o csv`: ячейки с `=`, `+`, `-`, `@` экранируются, объекты и массивы выводятся как JSON + +### n8n Node v2.0.16 + +- Запись (`POST`/`PATCH`) больше не повторяется автоматически при 5xx +- `Bot`: ресурс открывается на `Get Many` вместо `Recreate own bot token` +- `User`: у операций со статусом и аватаркой вернулся выбор сотрудника вместо числового поля +- `User` → `Update Avatar` и `Chat` → `Download Export` работают при выборе сущности из списка или по ссылке +- Выбор сотрудника: список открывается сразу, без ввода текста +- Пагинация и поиск чатов: курсор кодируется, доступны результаты со второй страницы и далее +- Триггер: вебхук без `webhook_timestamp` отклоняется, если задан секрет подписи + ### Самостоятельные треды и аудит видеозвонков _24 июля 2026_ -Появился метод [Новый самостоятельный тред](POST /threads) — создание треда, не связанного с сообщением. Тело запроса не требуется, создатель становится единственным участником треда. Метод требует скоуп `threads:create`. Поскольку у такого треда нет исходного сообщения, поля `message_id` и `message_chat_id` в объекте треда теперь могут возвращаться как `null` — это касается всех методов работы с тредами. +Появился метод [Новый самостоятельный тред](/api/threads/create) — создание треда, не связанного с сообщением. Тело запроса не требуется, создатель становится единственным участником треда. Метод требует скоуп `threads:create`. Поскольку у такого треда нет исходного сообщения, поля `message_id` и `message_chat_id` в объекте треда теперь могут возвращаться как `null` — это касается всех методов работы с тредами. -- [Новый самостоятельный тред](POST /threads) +- [Новый самостоятельный тред](/api/threads/create) В журнале аудита появились типы событий видеозвонков: `video_call_started`, `video_call_finished` и `video_call_recording_ready`. Их можно фильтровать параметром `event_key`. В деталях события возвращаются `chat_id`, длительность и (для записи) размер файла. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### SDK v1.0.27 @@ -38,25 +100,25 @@ _24 июля 2026_ _07 июля 2026_ -Появились методы для управления ботами. Метод [Список ботов](GET /bots) возвращает ботов, которые вы можете редактировать, с поиском по имени. Метод [Удаление бота](DELETE /bots/{id}) удаляет бота: прежний токен сразу инвалидируется, бот исключается из чатов, его исходящий вебхук удаляется. Оба метода требуют скоуп `bots:read` и `bots:write` соответственно. +Появились методы для управления ботами. Метод [Список ботов](/api/bots/list) возвращает ботов, которые вы можете редактировать, с поиском по имени. Метод [Удаление бота](/api/bots/delete) удаляет бота: прежний токен сразу инвалидируется, бот исключается из чатов, его исходящий вебхук удаляется. Оба метода требуют скоуп `bots:read` и `bots:write` соответственно. -- [Список ботов](GET /bots) -- [Удаление бота](DELETE /bots/{id}) +- [Список ботов](/api/bots/list) +- [Удаление бота](/api/bots/delete) При создании и редактировании бота добавились настройки прав доступа: `who_can_add` — кто может добавлять бота в чаты (`creator`, `creator_admin`, `creator_admin_user`, `anyone`), и `can_edit` — роли, которым, помимо создателя, разрешено редактировать настройки бота (`admin`, `chat_owners`). При создании также можно передать `single_chat` — ограничить бота одной беседой или каналом (личные чаты и треды в ограничение не входят). Все три поля возвращаются в объекте бота. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) Появился новый тип исходящего вебхука — события видеозвонков: `video_call_started`, `video_call_finished` и `video_call_recording_ready`. Вебхук приходит для видеозвонков в чатах, где состоит бот. Подробнее о payload — в гайде [Настройка и типы событий](/guides/webhook/events#videozvonki). В журнале аудита появился тип события `bot_deleted` — удаление бота. Его можно фильтровать параметром `event_key`. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) В поиске сотрудников у параметра `sort` появилось значение `creation` — сортировка по дате создания (в дополнение к `by_score` и `alphabetical`). -- [Поиск сотрудников](GET /search/users) +- [Поиск сотрудников](/api/search/list-users) ### SDK v1.0.26 @@ -89,20 +151,20 @@ _07 июля 2026_ _24 июня 2026_ -Токен бота теперь можно перевыпускать через API. Метод [Ротация токена бота](POST /bots/{id}/recreate_token) доступен администратору, владельцу компании или создателю бота по скоупу `bots:write`. Метод [Ротация собственного токена бота](POST /bot/recreate_token) позволяет боту перевыпустить токен самому себе по скоупу `bot_self:write`. Прежний токен инвалидируется сразу, новый возвращается в ответе один раз — сохраните его. +Токен бота теперь можно перевыпускать через API. Метод [Ротация токена бота](/api/bots/recreate-token) доступен администратору, владельцу компании или создателю бота по скоупу `bots:write`. Метод [Ротация собственного токена бота](/api/bots/recreate-token-self) позволяет боту перевыпустить токен самому себе по скоупу `bot_self:write`. Прежний токен инвалидируется сразу, новый возвращается в ответе один раз — сохраните его. -- [Ротация токена бота](POST /bots/{id}/recreate_token) -- [Ротация собственного токена бота](POST /bot/recreate_token) +- [Ротация токена бота](/api/bots/recreate-token) +- [Ротация собственного токена бота](/api/bots/recreate-token-self) -При создании и редактировании бота добавились две настройки вебхука: `ignore_self_messages` — игнорировать входящие сообщения, отправленные самим ботом (защита от зацикливания), и `events_history_enabled` — сохранять историю событий для получения через метод [История событий](GET /webhooks/events). Оба поля также возвращаются в объекте бота. +При создании и редактировании бота добавились две настройки вебхука: `ignore_self_messages` — игнорировать входящие сообщения, отправленные самим ботом (защита от зацикливания), и `events_history_enabled` — сохранять историю событий для получения через метод [История событий](/api/bots/list-events). Оба поля также возвращаются в объекте бота. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) -- [Информация о боте](GET /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) +- [Информация о боте](/api/bots/get) В журнале аудита появились новые типы событий, связанные с управлением ботами: `bot_token_recreated` (ротация токена), `bot_scopes_updated` (изменение скоупов токена) и `bot_webhook_settings_updated` (изменение настроек вебхука). Их можно фильтровать параметром `event_key`. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### Generator v1.1.8 @@ -136,13 +198,13 @@ _19 июня 2026_ При создании и редактировании бота теперь можно настроить его входящий вебхук: шаблон форматирования `template`, шаблонизатор `template_engine` (`liquid` или `mustache`), поле верификации `challenge_key` и показ превью ссылок `link_preview_enabled`. Эти же поля возвращаются в объекте бота. Подробнее о шаблонах и верификации — в гайде [Входящие вебхуки](/guides/incoming-webhooks). -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) -- [Информация о боте](GET /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) +- [Информация о боте](/api/bots/get) В поиске сообщений появился параметр `sort` — сортировка результатов: `created_at` (по дате создания, по умолчанию) или `relevance` (по релевантности). -- [Поиск сообщений](GET /search/messages) +- [Поиск сообщений](/api/search/list-messages) ### SDK v1.0.24 @@ -171,12 +233,12 @@ _16 июня 2026_ Теперь при создании и редактировании бота можно задать скоупы его токена — параметр `scopes`. Если он не указан, бот получает набор по умолчанию. Текущие скоупы бота возвращаются в объекте бота в поле `scopes`. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) Бот может самостоятельно изменить `URL` своего исходящего вебхука своим же токеном — без участия администратора и без знания собственного `user_id`. Для этого нужен скоуп `bot_self:webhook:write`. -- [Саморегистрация вебхука бота](PUT /bot/webhook) +- [Саморегистрация вебхука бота](/api/bots/update-webhook) ### CLI v2026.6.1 @@ -203,14 +265,14 @@ _15 июня 2026_ Новые и обновлённые методы для ботов: -- [Новый бот](POST /bots) -- [Информация о боте](GET /bots/{id}) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Информация о боте](/api/bots/get) +- [Редактирование бота](/api/bots/update) Появилась поддержка голосовых сообщений. В сообщении возвращается объект `voice_content` с длительностью, формой волны и расшифровкой, а при отправке файла с `file_type` = `voice` принимаются параметры `duration_ms` и `waveform`. -- [Новое сообщение](POST /messages) -- [Редактирование сообщения](PUT /messages/{id}) +- [Новое сообщение](/api/messages/create) +- [Редактирование сообщения](/api/messages/update) В payload вебхука реакции поле `created_at` теперь приходит и при удалении реакции. Также в деталях события аудита DLP поле `action_message` может быть `null`, если у действия правила не задан текст. @@ -239,7 +301,7 @@ SDK стали точнее типизировать payload вебхуков и Был обновлен следующий метод: -- [История событий](GET /webhooks/events) +- [История событий](/api/bots/list-events) ### SDK v1.0.21 @@ -275,7 +337,7 @@ _20 мая 2026_ Был добавлен новый метод: -- [Список тредов](GET /threads) +- [Список тредов](/api/threads/list) С помощью этого метода вы можете получить доступные треды и собирать по ним сводки и дайджесты за период. @@ -299,7 +361,7 @@ _17 мая 2026_ Был обновлен следующий метод: -- [Новый сотрудник](POST /users) +- [Новый сотрудник](/api/users/create) В CLI добавлены команды для просмотра списка всех эндпоинтов и справки по каждому — не нужно знать эндпоинт заранее или искать его в документации. Данные генерируются из той же OpenAPI-спецификации, из которой собран сам CLI, поэтому всегда совпадают с актуальным API. Для AI-агентов это ключевое: не нужно загружать документацию в контекст — агент запрашивает у CLI нужный метод и сразу его вызывает. @@ -335,17 +397,17 @@ _06 мая 2026_ Затронутые методы: -- [Список сотрудников](GET /users) -- [Список чатов](GET /chats) -- [Список участников чата](GET /chats/{id}/members) -- [Список сообщений чата](GET /messages) -- [Список реакций](GET /messages/{id}/reactions) -- [Список тегов сотрудников](GET /group_tags) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список напоминаний](GET /tasks) -- [Журнал аудита событий](GET /audit_events) -- [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) -- [История событий](GET /webhooks/events) +- [Список сотрудников](/api/users/list) +- [Список чатов](/api/chats/list) +- [Список участников чата](/api/members/list) +- [Список сообщений чата](/api/messages/list) +- [Список реакций](/api/reactions/list) +- [Список тегов сотрудников](/api/group-tags/list) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список напоминаний](/api/tasks/list) +- [Журнал аудита событий](/api/security/list) +- [Список прочитавших сообщение](/api/read-member/list-readers) +- [История событий](/api/bots/list-events) В вебхуке [Разворачивание ссылок](/guides/link-previews) каждый объект массива `links` теперь содержит поле `skip: boolean`. Если значение `true` — автор сообщения скрыл превью для этой ссылки, и бот не должен её разворачивать. Это позволяет уважать выбор пользователя и не генерировать нежелательные превью. @@ -383,14 +445,14 @@ _04 мая 2026_ Уточнены типы полей модели `User`: поля `last_name`, `email`, `phone_number`, `department`, `title`, `time_zone` и `last_activity_at` теперь корректно объявлены как nullable. Поля `email` и `phone_number` возвращают `null` для ботов без права просмотра персональных данных. -В payload трёх исходящих вебхуков (`reaction_new`, `reaction_delete`, `view_submit`) добавлено поле `chat_id` — идентификатор чата, в котором произошло событие. Поле всегда присутствует в payload, в редких случаях может прийти как `null`. Это убирает необходимость в дополнительном запросе [Информация о сообщении](GET /messages/{id}) для определения чата по событию. Подробнее о поведении `chat_id` для `view_submit` — в разделе [Заполнение формы](/guides/webhook/events#zapolnenie-formy). +В payload трёх исходящих вебхуков (`reaction_new`, `reaction_delete`, `view_submit`) добавлено поле `chat_id` — идентификатор чата, в котором произошло событие. Поле всегда присутствует в payload, в редких случаях может прийти как `null`. Это убирает необходимость в дополнительном запросе [Информация о сообщении](/api/messages/get) для определения чата по событию. Подробнее о поведении `chat_id` для `view_submit` — в разделе [Заполнение формы](/guides/webhook/events#zapolnenie-formy). Были обновлены следующие методы: -- [Список сотрудников](GET /users) -- [Информация о сотруднике](GET /users/{id}) -- [Новый сотрудник](POST /users) -- [Редактирование сотрудника](PUT /users/{id}) +- [Список сотрудников](/api/users/list) +- [Информация о сотруднике](/api/users/get) +- [Новый сотрудник](/api/users/create) +- [Редактирование сотрудника](/api/users/update) ### n8n Node v2.0.6 @@ -452,7 +514,7 @@ _13 апреля 2026_ _08 апреля 2026_ -При [Отправке сообщений](POST /messages) и [Редактировании сообщений](PUT /messages/{id}) теперь можно упоминать пользователей по идентификатору: просто вставьте `<@user_id>` в текст сообщения (например, `<@3876>`) и это автоматически преобразуется это в `@nickname`. Это удобно для интеграций, когда идентификатор пользователя уже известен и не нужно дополнительно искать его никнейм. +При [Отправке сообщений](/api/messages/create) и [Редактировании сообщений](/api/messages/update) теперь можно упоминать пользователей по идентификатору: просто вставьте `<@user_id>` в текст сообщения (например, `<@3876>`) и это автоматически преобразуется это в `@nickname`. Это удобно для интеграций, когда идентификатор пользователя уже известен и не нужно дополнительно искать его никнейм. ### CLI v2026.4.1 @@ -471,14 +533,14 @@ _07 апреля 2026_ Были добавлены новые методы для управления аватарами: -- [Загрузка своего аватара](PUT /profile/avatar) -- [Удаление своего аватара](DELETE /profile/avatar) -- [Загрузка аватара сотрудника](PUT /users/{user_id}/avatar) -- [Удаление аватара сотрудника](DELETE /users/{user_id}/avatar) +- [Загрузка своего аватара](/api/profile/update-avatar) +- [Удаление своего аватара](/api/profile/delete-avatar) +- [Загрузка аватара сотрудника](/api/users/update-avatar) +- [Удаление аватара сотрудника](/api/users/remove-avatar) С помощью этих методов вы можете загружать и удалять аватары для своего профиля и для сотрудников вашей компании. -В методах [Список чатов](GET /chats) и [Список сообщений чата](GET /messages) добавлен новый формат параметров сортировки: `sort` (поле сортировки) и `order` (направление: `asc` или `desc`). +В методах [Список чатов](/api/chats/list) и [Список сообщений чата](/api/messages/list) добавлен новый формат параметров сортировки: `sort` (поле сортировки) и `order` (направление: `asc` или `desc`). ### CLI v2026.4.0 @@ -536,23 +598,23 @@ _21 марта 2026_ Во все методы, требующие оплаченного тарифа, добавлен ответ `402 Payment Required`. -В методах [Новый сотрудник](POST /users) и [Редактирование сотрудника](PUT /users/{id}) уточнены допустимые значения поля `role`: `admin`, `user` и `multi_guest`. Значение `guest` недоступно для установки через API — оно присутствует только в ответах. +В методах [Новый сотрудник](/api/users/create) и [Редактирование сотрудника](/api/users/update) уточнены допустимые значения поля `role`: `admin`, `user` и `multi_guest`. Значение `guest` недоступно для установки через API — оно присутствует только в ответах. -Поле `link_preview` в запросе [Отправить сообщение](POST /messages) перенесено на верхний уровень тела запроса — отдельно от объекта `message`. +Поле `link_preview` в запросе [Отправить сообщение](/api/messages/create) перенесено на верхний уровень тела запроса — отдельно от объекта `message`. -Метод [Закрепление сообщения](POST /messages/{id}/pin) при попытке закрепить уже закреплённое сообщение возвращает `422 Unprocessable Entity`. +Метод [Закрепление сообщения](/api/messages/pin) при попытке закрепить уже закреплённое сообщение возвращает `422 Unprocessable Entity`. -Параметры `start_time` и `end_time` в методе [Журнал аудита событий](GET /audit_events) стали необязательными — без них возвращаются все события. +Параметры `start_time` и `end_time` в методе [Журнал аудита событий](/api/security/list) стали необязательными — без них возвращаются все события. Уточнён тип поля `name` в модели [реакции](/api/models#reaktsiya-na-soobschenie): `string | null` вместо опционального. Были обновлены следующие методы: -- [Новое сообщение](POST /messages) -- [Новый сотрудник](POST /users) -- [Редактирование сотрудника](PUT /users/{id}) -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Журнал аудита событий](GET /audit_events) +- [Новое сообщение](/api/messages/create) +- [Новый сотрудник](/api/users/create) +- [Редактирование сотрудника](/api/users/update) +- [Закрепление сообщения](/api/messages/pin) +- [Журнал аудита событий](/api/security/list) ### CLI v2026.3.10 @@ -576,9 +638,9 @@ _19 марта 2026_ Скоупы персональных токенов теперь можно изменять после создания — в настройках токена. Раньше для изменения набора разрешений токен нужно было пересоздавать. Подробнее в разделе [Авторизация](/api/authorization#skoupy). -Метод [Закрепление сообщения](POST /messages/{id}/pin) теперь возвращает `204 No Content` вместо `201 Created`. +Метод [Закрепление сообщения](/api/messages/pin) теперь возвращает `204 No Content` вместо `201 Created`. -Поле `thread` в модели [сообщения](/api/models#message) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](POST /messages/{id}/thread) и [Информация о треде](GET /threads/{id}). +Поле `thread` в модели [сообщения](/api/models#soobschenie) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](/api/threads/add) и [Информация о треде](/api/threads/get). Поле `payload` в модели ошибки валидации теперь имеет тип `object | null` вместо `string | null` и содержит структурированные данные — идентификатор кастомного свойства при ошибке поля или параметры авторизации. @@ -586,10 +648,10 @@ _19 марта 2026_ Были обновлены следующие методы: -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Новое сообщение](POST /messages) -- [Информация о сообщении](GET /messages/{id}) -- [Список сообщений чата](GET /messages) +- [Закрепление сообщения](/api/messages/pin) +- [Новое сообщение](/api/messages/create) +- [Информация о сообщении](/api/messages/get) +- [Список сообщений чата](/api/messages/list) ### CLI v2026.3.9 diff --git a/apps/docs/public/updates/2025-03-17.md b/apps/docs/public/updates/2025-03-17.md index ec15acdc7..722c81043 100644 --- a/apps/docs/public/updates/2025-03-17.md +++ b/apps/docs/public/updates/2025-03-17.md @@ -12,4 +12,4 @@ _17 марта 2025_ Был обновлен следующий метод: -- [Список чатов](GET /chats) +- [Список чатов](/api/chats/list) diff --git a/apps/docs/public/updates/2025-03-18.md b/apps/docs/public/updates/2025-03-18.md index cc113e910..3b7ffae03 100644 --- a/apps/docs/public/updates/2025-03-18.md +++ b/apps/docs/public/updates/2025-03-18.md @@ -6,6 +6,6 @@ _18 марта 2025_ Был добавлен новый метод: -- [Свой профиль](GET /profile) +- [Свой профиль](/api/profile/get) С помощью этого метода вы можете получить всю информацию о пользователе, `access_token` которого используется. diff --git a/apps/docs/public/updates/2025-03-21.md b/apps/docs/public/updates/2025-03-21.md index 44cf3d68a..9bfdc4516 100644 --- a/apps/docs/public/updates/2025-03-21.md +++ b/apps/docs/public/updates/2025-03-21.md @@ -6,6 +6,6 @@ _21 марта 2025_ Был добавлен новый метод: -- [Экспорт сообщений](POST /chats/exports) +- [Экспорт сообщений](/api/chats/request-export) С помощью этого метода Владелец пространства на тарифе «Корпорация» может запросить экспорт сообщений пространства в формате JSON файлов, упакованных в zip архив. diff --git a/apps/docs/public/updates/2025-04-07.md b/apps/docs/public/updates/2025-04-07.md index 799e2e61d..efe941c3c 100644 --- a/apps/docs/public/updates/2025-04-07.md +++ b/apps/docs/public/updates/2025-04-07.md @@ -12,4 +12,4 @@ _07 апреля 2025_ Был обновлен следующий метод: -- [Список сообщений чата](GET /chats/{id}/messages) +- [Список сообщений чата](/api/messages/list) diff --git a/apps/docs/public/updates/2025-05-21.md b/apps/docs/public/updates/2025-05-21.md index f98a8c30e..8caa1a600 100644 --- a/apps/docs/public/updates/2025-05-21.md +++ b/apps/docs/public/updates/2025-05-21.md @@ -6,6 +6,6 @@ _21 мая 2025_ Был добавлен новый метод: -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) С помощью этого метода вы можете отслеживать и получать данные о важных событиях, происходящих в вашем пространстве — активность пользователей и системные изменения. diff --git a/apps/docs/public/updates/2025-06-02.md b/apps/docs/public/updates/2025-06-02.md index 00f5dc180..00a4eb45a 100644 --- a/apps/docs/public/updates/2025-06-02.md +++ b/apps/docs/public/updates/2025-06-02.md @@ -6,7 +6,7 @@ _02 июня 2025_ Был добавлен новый метод: -- [Список участников чата](GET /chats/{id}/members) +- [Список участников чата](/api/members/list) С помощью этого метода можно запросить список участников чата с фильтрацией по ролям в чате. diff --git a/apps/docs/public/updates/2025-08-07.md b/apps/docs/public/updates/2025-08-07.md index 2c7ca78b7..dd502b1c5 100644 --- a/apps/docs/public/updates/2025-08-07.md +++ b/apps/docs/public/updates/2025-08-07.md @@ -12,9 +12,9 @@ _07 августа 2025_ Были обновлены следующие методы: -- [Новый сотрудник](POST /users) -- [Информация о сотруднике](GET /users/{id}) -- [Список сотрудников](GET /users) -- [Редактирование сотрудника](PUT /users/{id}) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список участников чата](GET /chats/{id}/members) +- [Новый сотрудник](/api/users/create) +- [Информация о сотруднике](/api/users/get) +- [Список сотрудников](/api/users/list) +- [Редактирование сотрудника](/api/users/update) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список участников чата](/api/members/list) diff --git a/apps/docs/public/updates/2025-08-12.md b/apps/docs/public/updates/2025-08-12.md index d51195e07..8c0c91b8c 100644 --- a/apps/docs/public/updates/2025-08-12.md +++ b/apps/docs/public/updates/2025-08-12.md @@ -7,7 +7,7 @@ _12 августа 2025_ Был добавлен новый раздел, посвященный работе с формами. Вы можете ознакомиться со следующими страницами: - [Формы](/guides/forms/overview) -- [Открытие представления](POST /views/open) +- [Открытие представления](/api/views/open) - [Получение результатов](/guides/webhook/overview) С помощью форм вы можете получать от пользователей данные через заданный вами набор полей и отображать дополнительную информацию в модальных окнах по запросу пользователей. diff --git a/apps/docs/public/updates/2025-08-20.md b/apps/docs/public/updates/2025-08-20.md index e469517f3..091ad08fa 100644 --- a/apps/docs/public/updates/2025-08-20.md +++ b/apps/docs/public/updates/2025-08-20.md @@ -13,4 +13,4 @@ _20 августа 2025_ Был обновлен следующий метод: -- [Список чатов](GET /chats) +- [Список чатов](/api/chats/list) diff --git a/apps/docs/public/updates/2025-09-01.md b/apps/docs/public/updates/2025-09-01.md index 3a2771819..c7f094383 100644 --- a/apps/docs/public/updates/2025-09-01.md +++ b/apps/docs/public/updates/2025-09-01.md @@ -6,6 +6,6 @@ _01 сентября 2025_ Был добавлен новый метод: -- [Редактирование бота](PUT /bots/{id}) +- [Редактирование бота](/api/bots/update) С помощью этого метода вы можете изменить параметры ботов, к которым у вас есть доступ. diff --git a/apps/docs/public/updates/2025-09-09.md b/apps/docs/public/updates/2025-09-09.md index 40eda8d38..0c5cd0b6f 100644 --- a/apps/docs/public/updates/2025-09-09.md +++ b/apps/docs/public/updates/2025-09-09.md @@ -13,4 +13,4 @@ _09 сентября 2025_ Был обновлен следующий метод: -- [Список сотрудников](GET /users) +- [Список сотрудников](/api/users/list) diff --git a/apps/docs/public/updates/2025-11-20.md b/apps/docs/public/updates/2025-11-20.md index a05662245..13417f077 100644 --- a/apps/docs/public/updates/2025-11-20.md +++ b/apps/docs/public/updates/2025-11-20.md @@ -6,7 +6,7 @@ _20 ноября 2025_ Были добавлены новые методы: -- [История событий](GET /webhooks/events) -- [Удаление события](DELETE /webhooks/events/{id}) +- [История событий](/api/bots/list-events) +- [Удаление события](/api/bots/remove-event) С помощью этих методов вы можете получить список событий бота и удалить событие из этого списка. diff --git a/apps/docs/public/updates/2026-01-29.md b/apps/docs/public/updates/2026-01-29.md index 36a53fde8..a87faa8fd 100644 --- a/apps/docs/public/updates/2026-01-29.md +++ b/apps/docs/public/updates/2026-01-29.md @@ -12,4 +12,4 @@ _29 января 2026_ Был обновлен следующий метод: -- [Список тегов сотрудников](GET /group_tags) +- [Список тегов сотрудников](/api/group-tags/list) diff --git a/apps/docs/public/updates/2026-02-09.md b/apps/docs/public/updates/2026-02-09.md index 20902ad8c..965f8fec9 100644 --- a/apps/docs/public/updates/2026-02-09.md +++ b/apps/docs/public/updates/2026-02-09.md @@ -6,9 +6,9 @@ _09 февраля 2026_ Были добавлены новые методы: -- [Список напоминаний](GET /tasks) -- [Информация о напоминании](GET /tasks/{id}) -- [Редактирование напоминания](PUT /tasks/{id}) -- [Удаление напоминания](DELETE /tasks/{id}) +- [Список напоминаний](/api/tasks/list) +- [Информация о напоминании](/api/tasks/get) +- [Редактирование напоминания](/api/tasks/update) +- [Удаление напоминания](/api/tasks/delete) С помощью этих методов вы можете получать список напоминаний, просматривать, редактировать и удалять их. diff --git a/apps/docs/public/updates/2026-02-12.md b/apps/docs/public/updates/2026-02-12.md index 54c17875f..0ad8e128e 100644 --- a/apps/docs/public/updates/2026-02-12.md +++ b/apps/docs/public/updates/2026-02-12.md @@ -4,4 +4,4 @@ _12 февраля 2026_ -Метод [Добавление пользователей](POST /chats/{id}/members) теперь поддерживает работу с тредами. Вы можете передать `chat_id` треда в качестве идентификатора чата, чтобы добавить участников в тред. +Метод [Добавление пользователей](/api/members/add) теперь поддерживает работу с тредами. Вы можете передать `chat_id` треда в качестве идентификатора чата, чтобы добавить участников в тред. diff --git a/apps/docs/public/updates/2026-02-16.md b/apps/docs/public/updates/2026-02-16.md index c01ac6540..3da388bb6 100644 --- a/apps/docs/public/updates/2026-02-16.md +++ b/apps/docs/public/updates/2026-02-16.md @@ -8,9 +8,9 @@ _16 февраля 2026_ Были обновлены следующие методы: -- [Список тегов сотрудников](GET /group_tags) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список сообщений чата](GET /messages) -- [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) -- [Список реакций](GET /messages/{id}/reactions) -- [Список напоминаний](GET /tasks) +- [Список тегов сотрудников](/api/group-tags/list) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список сообщений чата](/api/messages/list) +- [Список прочитавших сообщение](/api/read-member/list-readers) +- [Список реакций](/api/reactions/list) +- [Список напоминаний](/api/tasks/list) diff --git a/apps/docs/public/updates/2026-02-19.md b/apps/docs/public/updates/2026-02-19.md index b3b29412a..da6c1838f 100644 --- a/apps/docs/public/updates/2026-02-19.md +++ b/apps/docs/public/updates/2026-02-19.md @@ -18,4 +18,4 @@ _19 февраля 2026_ Был обновлен следующий метод: -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) diff --git a/apps/docs/public/updates/2026-02-20.md b/apps/docs/public/updates/2026-02-20.md index 62b3e8559..e793a299f 100644 --- a/apps/docs/public/updates/2026-02-20.md +++ b/apps/docs/public/updates/2026-02-20.md @@ -15,4 +15,4 @@ _20 февраля 2026_ Был обновлен следующий метод: -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) diff --git a/apps/docs/public/updates/2026-02-24.md b/apps/docs/public/updates/2026-02-24.md index 5087a0f74..0e3ae114c 100644 --- a/apps/docs/public/updates/2026-02-24.md +++ b/apps/docs/public/updates/2026-02-24.md @@ -8,6 +8,6 @@ _24 февраля 2026_ Был добавлен новый метод: -- [Информация о токене](GET /oauth/token/info) — получение информации о текущем OAuth токене, включая список скоупов, дату создания и последнего использования +- [Информация о токене](/api/oauth/token-info) — получение информации о текущем OAuth токене, включая список скоупов, дату создания и последнего использования Появился новый раздел документации — [Авторизация](/api/authorization). В нём описаны типы токенов, способы их создания, скоупы для персональных токенов и фиксированный набор скоупов для токенов ботов, а также ошибки авторизации. diff --git a/apps/docs/public/updates/2026-02-25.md b/apps/docs/public/updates/2026-02-25.md index fd9ed16f7..b7ffc1165 100644 --- a/apps/docs/public/updates/2026-02-25.md +++ b/apps/docs/public/updates/2026-02-25.md @@ -8,7 +8,7 @@ _25 февраля 2026_ Были обновлены следующие методы: -- [Новое напоминание](POST /tasks) -- [Список напоминаний](GET /tasks) -- [Информация о напоминании](GET /tasks/{id}) -- [Редактирование напоминания](PUT /tasks/{id}) +- [Новое напоминание](/api/tasks/create) +- [Список напоминаний](/api/tasks/list) +- [Информация о напоминании](/api/tasks/get) +- [Редактирование напоминания](/api/tasks/update) diff --git a/apps/docs/public/updates/2026-02-26.md b/apps/docs/public/updates/2026-02-26.md index a9c993513..fbb171f09 100644 --- a/apps/docs/public/updates/2026-02-26.md +++ b/apps/docs/public/updates/2026-02-26.md @@ -8,11 +8,11 @@ _26 февраля 2026_ Были добавлены новые методы: -- [Статус сотрудника](GET /users/{user_id}/status) -- [Новый статус сотрудника](PUT /users/{user_id}/status) -- [Удаление статуса сотрудника](DELETE /users/{user_id}/status) +- [Статус сотрудника](/api/users/get-status) +- [Новый статус сотрудника](/api/users/update-status) +- [Удаление статуса сотрудника](/api/users/remove-status) Были обновлены следующие методы: -- [Свой статус](GET /profile/status) -- [Новый свой статус](PUT /profile/status) +- [Свой статус](/api/profile/get-status) +- [Новый свой статус](/api/profile/update-status) diff --git a/apps/docs/public/updates/2026-02-27.md b/apps/docs/public/updates/2026-02-27.md index 36f6682c3..db9128ac1 100644 --- a/apps/docs/public/updates/2026-02-27.md +++ b/apps/docs/public/updates/2026-02-27.md @@ -6,9 +6,9 @@ _27 февраля 2026_ Были добавлены новые методы для полнотекстового поиска по сотрудникам, чатам и сообщениям: -- [Поиск сотрудников](GET /search/users) -- [Поиск чатов](GET /search/chats) -- [Поиск сообщений](GET /search/messages) +- [Поиск сотрудников](/api/search/list-users) +- [Поиск чатов](/api/search/list-chats) +- [Поиск сообщений](/api/search/list-messages) С помощью этих методов вы можете искать по текстовому запросу с поддержкой фильтрации и курсорной пагинации. @@ -18,9 +18,9 @@ _27 февраля 2026_ Были обновлены следующие методы: -- [Новый свой статус](PUT /profile/status) -- [Новый статус сотрудника](PUT /users/{user_id}/status) -- [Новое сообщение](POST /messages) -- [Информация о сообщении](GET /messages/{id}) -- [Редактирование сообщения](PUT /messages/{id}) -- [Список сообщений чата](GET /messages) +- [Новый свой статус](/api/profile/update-status) +- [Новый статус сотрудника](/api/users/update-status) +- [Новое сообщение](/api/messages/create) +- [Информация о сообщении](/api/messages/get) +- [Редактирование сообщения](/api/messages/update) +- [Список сообщений чата](/api/messages/list) diff --git a/apps/docs/public/updates/2026-03-19.md b/apps/docs/public/updates/2026-03-19.md index 722ca42cb..d27a58615 100644 --- a/apps/docs/public/updates/2026-03-19.md +++ b/apps/docs/public/updates/2026-03-19.md @@ -6,9 +6,9 @@ _19 марта 2026_ Скоупы персональных токенов теперь можно изменять после создания — в настройках токена. Раньше для изменения набора разрешений токен нужно было пересоздавать. Подробнее в разделе [Авторизация](/api/authorization#skoupy). -Метод [Закрепление сообщения](POST /messages/{id}/pin) теперь возвращает `204 No Content` вместо `201 Created`. +Метод [Закрепление сообщения](/api/messages/pin) теперь возвращает `204 No Content` вместо `201 Created`. -Поле `thread` в модели [сообщения](/api/models#message) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](POST /messages/{id}/thread) и [Информация о треде](GET /threads/{id}). +Поле `thread` в модели [сообщения](/api/models#soobschenie) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](/api/threads/add) и [Информация о треде](/api/threads/get). Поле `payload` в модели ошибки валидации теперь имеет тип `object | null` вместо `string | null` и содержит структурированные данные — идентификатор кастомного свойства при ошибке поля или параметры авторизации. @@ -16,10 +16,10 @@ _19 марта 2026_ Были обновлены следующие методы: -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Новое сообщение](POST /messages) -- [Информация о сообщении](GET /messages/{id}) -- [Список сообщений чата](GET /messages) +- [Закрепление сообщения](/api/messages/pin) +- [Новое сообщение](/api/messages/create) +- [Информация о сообщении](/api/messages/get) +- [Список сообщений чата](/api/messages/list) ### CLI v2026.3.9 diff --git a/apps/docs/public/updates/2026-03-21.md b/apps/docs/public/updates/2026-03-21.md index eee790183..44609a367 100644 --- a/apps/docs/public/updates/2026-03-21.md +++ b/apps/docs/public/updates/2026-03-21.md @@ -6,23 +6,23 @@ _21 марта 2026_ Во все методы, требующие оплаченного тарифа, добавлен ответ `402 Payment Required`. -В методах [Новый сотрудник](POST /users) и [Редактирование сотрудника](PUT /users/{id}) уточнены допустимые значения поля `role`: `admin`, `user` и `multi_guest`. Значение `guest` недоступно для установки через API — оно присутствует только в ответах. +В методах [Новый сотрудник](/api/users/create) и [Редактирование сотрудника](/api/users/update) уточнены допустимые значения поля `role`: `admin`, `user` и `multi_guest`. Значение `guest` недоступно для установки через API — оно присутствует только в ответах. -Поле `link_preview` в запросе [Отправить сообщение](POST /messages) перенесено на верхний уровень тела запроса — отдельно от объекта `message`. +Поле `link_preview` в запросе [Отправить сообщение](/api/messages/create) перенесено на верхний уровень тела запроса — отдельно от объекта `message`. -Метод [Закрепление сообщения](POST /messages/{id}/pin) при попытке закрепить уже закреплённое сообщение возвращает `422 Unprocessable Entity`. +Метод [Закрепление сообщения](/api/messages/pin) при попытке закрепить уже закреплённое сообщение возвращает `422 Unprocessable Entity`. -Параметры `start_time` и `end_time` в методе [Журнал аудита событий](GET /audit_events) стали необязательными — без них возвращаются все события. +Параметры `start_time` и `end_time` в методе [Журнал аудита событий](/api/security/list) стали необязательными — без них возвращаются все события. Уточнён тип поля `name` в модели [реакции](/api/models#reaktsiya-na-soobschenie): `string | null` вместо опционального. Были обновлены следующие методы: -- [Новое сообщение](POST /messages) -- [Новый сотрудник](POST /users) -- [Редактирование сотрудника](PUT /users/{id}) -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Журнал аудита событий](GET /audit_events) +- [Новое сообщение](/api/messages/create) +- [Новый сотрудник](/api/users/create) +- [Редактирование сотрудника](/api/users/update) +- [Закрепление сообщения](/api/messages/pin) +- [Журнал аудита событий](/api/security/list) ### CLI v2026.3.10 diff --git a/apps/docs/public/updates/2026-04-07.md b/apps/docs/public/updates/2026-04-07.md index 385a81ab3..98666733c 100644 --- a/apps/docs/public/updates/2026-04-07.md +++ b/apps/docs/public/updates/2026-04-07.md @@ -6,14 +6,14 @@ _07 апреля 2026_ Были добавлены новые методы для управления аватарами: -- [Загрузка своего аватара](PUT /profile/avatar) -- [Удаление своего аватара](DELETE /profile/avatar) -- [Загрузка аватара сотрудника](PUT /users/{user_id}/avatar) -- [Удаление аватара сотрудника](DELETE /users/{user_id}/avatar) +- [Загрузка своего аватара](/api/profile/update-avatar) +- [Удаление своего аватара](/api/profile/delete-avatar) +- [Загрузка аватара сотрудника](/api/users/update-avatar) +- [Удаление аватара сотрудника](/api/users/remove-avatar) С помощью этих методов вы можете загружать и удалять аватары для своего профиля и для сотрудников вашей компании. -В методах [Список чатов](GET /chats) и [Список сообщений чата](GET /messages) добавлен новый формат параметров сортировки: `sort` (поле сортировки) и `order` (направление: `asc` или `desc`). +В методах [Список чатов](/api/chats/list) и [Список сообщений чата](/api/messages/list) добавлен новый формат параметров сортировки: `sort` (поле сортировки) и `order` (направление: `asc` или `desc`). ### CLI v2026.4.0 diff --git a/apps/docs/public/updates/2026-04-08.md b/apps/docs/public/updates/2026-04-08.md index e72ef2020..31b4cf740 100644 --- a/apps/docs/public/updates/2026-04-08.md +++ b/apps/docs/public/updates/2026-04-08.md @@ -4,7 +4,7 @@ _08 апреля 2026_ -При [Отправке сообщений](POST /messages) и [Редактировании сообщений](PUT /messages/{id}) теперь можно упоминать пользователей по идентификатору: просто вставьте `<@user_id>` в текст сообщения (например, `<@3876>`) и это автоматически преобразуется это в `@nickname`. Это удобно для интеграций, когда идентификатор пользователя уже известен и не нужно дополнительно искать его никнейм. +При [Отправке сообщений](/api/messages/create) и [Редактировании сообщений](/api/messages/update) теперь можно упоминать пользователей по идентификатору: просто вставьте `<@user_id>` в текст сообщения (например, `<@3876>`) и это автоматически преобразуется это в `@nickname`. Это удобно для интеграций, когда идентификатор пользователя уже известен и не нужно дополнительно искать его никнейм. ### CLI v2026.4.1 diff --git a/apps/docs/public/updates/2026-05-04.md b/apps/docs/public/updates/2026-05-04.md index 0706db807..2e4eb40d9 100644 --- a/apps/docs/public/updates/2026-05-04.md +++ b/apps/docs/public/updates/2026-05-04.md @@ -8,14 +8,14 @@ _04 мая 2026_ Уточнены типы полей модели `User`: поля `last_name`, `email`, `phone_number`, `department`, `title`, `time_zone` и `last_activity_at` теперь корректно объявлены как nullable. Поля `email` и `phone_number` возвращают `null` для ботов без права просмотра персональных данных. -В payload трёх исходящих вебхуков (`reaction_new`, `reaction_delete`, `view_submit`) добавлено поле `chat_id` — идентификатор чата, в котором произошло событие. Поле всегда присутствует в payload, в редких случаях может прийти как `null`. Это убирает необходимость в дополнительном запросе [Информация о сообщении](GET /messages/{id}) для определения чата по событию. Подробнее о поведении `chat_id` для `view_submit` — в разделе [Заполнение формы](/guides/webhook/events#zapolnenie-formy). +В payload трёх исходящих вебхуков (`reaction_new`, `reaction_delete`, `view_submit`) добавлено поле `chat_id` — идентификатор чата, в котором произошло событие. Поле всегда присутствует в payload, в редких случаях может прийти как `null`. Это убирает необходимость в дополнительном запросе [Информация о сообщении](/api/messages/get) для определения чата по событию. Подробнее о поведении `chat_id` для `view_submit` — в разделе [Заполнение формы](/guides/webhook/events#zapolnenie-formy). Были обновлены следующие методы: -- [Список сотрудников](GET /users) -- [Информация о сотруднике](GET /users/{id}) -- [Новый сотрудник](POST /users) -- [Редактирование сотрудника](PUT /users/{id}) +- [Список сотрудников](/api/users/list) +- [Информация о сотруднике](/api/users/get) +- [Новый сотрудник](/api/users/create) +- [Редактирование сотрудника](/api/users/update) ### n8n Node v2.0.6 diff --git a/apps/docs/public/updates/2026-05-06.md b/apps/docs/public/updates/2026-05-06.md index e50364793..fb342c6d3 100644 --- a/apps/docs/public/updates/2026-05-06.md +++ b/apps/docs/public/updates/2026-05-06.md @@ -14,17 +14,17 @@ _06 мая 2026_ Затронутые методы: -- [Список сотрудников](GET /users) -- [Список чатов](GET /chats) -- [Список участников чата](GET /chats/{id}/members) -- [Список сообщений чата](GET /messages) -- [Список реакций](GET /messages/{id}/reactions) -- [Список тегов сотрудников](GET /group_tags) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список напоминаний](GET /tasks) -- [Журнал аудита событий](GET /audit_events) -- [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) -- [История событий](GET /webhooks/events) +- [Список сотрудников](/api/users/list) +- [Список чатов](/api/chats/list) +- [Список участников чата](/api/members/list) +- [Список сообщений чата](/api/messages/list) +- [Список реакций](/api/reactions/list) +- [Список тегов сотрудников](/api/group-tags/list) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список напоминаний](/api/tasks/list) +- [Журнал аудита событий](/api/security/list) +- [Список прочитавших сообщение](/api/read-member/list-readers) +- [История событий](/api/bots/list-events) В вебхуке [Разворачивание ссылок](/guides/link-previews) каждый объект массива `links` теперь содержит поле `skip: boolean`. Если значение `true` — автор сообщения скрыл превью для этой ссылки, и бот не должен её разворачивать. Это позволяет уважать выбор пользователя и не генерировать нежелательные превью. diff --git a/apps/docs/public/updates/2026-05-17.md b/apps/docs/public/updates/2026-05-17.md index 0f4dde451..093e03462 100644 --- a/apps/docs/public/updates/2026-05-17.md +++ b/apps/docs/public/updates/2026-05-17.md @@ -8,7 +8,7 @@ _17 мая 2026_ Был обновлен следующий метод: -- [Новый сотрудник](POST /users) +- [Новый сотрудник](/api/users/create) В CLI добавлены команды для просмотра списка всех эндпоинтов и справки по каждому — не нужно знать эндпоинт заранее или искать его в документации. Данные генерируются из той же OpenAPI-спецификации, из которой собран сам CLI, поэтому всегда совпадают с актуальным API. Для AI-агентов это ключевое: не нужно загружать документацию в контекст — агент запрашивает у CLI нужный метод и сразу его вызывает. diff --git a/apps/docs/public/updates/2026-05-20.md b/apps/docs/public/updates/2026-05-20.md index 336a7334d..bc8227e02 100644 --- a/apps/docs/public/updates/2026-05-20.md +++ b/apps/docs/public/updates/2026-05-20.md @@ -6,7 +6,7 @@ _20 мая 2026_ Был добавлен новый метод: -- [Список тредов](GET /threads) +- [Список тредов](/api/threads/list) С помощью этого метода вы можете получить доступные треды и собирать по ним сводки и дайджесты за период. diff --git a/apps/docs/public/updates/2026-06-05.md b/apps/docs/public/updates/2026-06-05.md index 4b35435a8..296be387a 100644 --- a/apps/docs/public/updates/2026-06-05.md +++ b/apps/docs/public/updates/2026-06-05.md @@ -8,7 +8,7 @@ SDK стали точнее типизировать payload вебхуков и Был обновлен следующий метод: -- [История событий](GET /webhooks/events) +- [История событий](/api/bots/list-events) ### SDK v1.0.21 diff --git a/apps/docs/public/updates/2026-06-15.md b/apps/docs/public/updates/2026-06-15.md index 3e1184898..ea3d21667 100644 --- a/apps/docs/public/updates/2026-06-15.md +++ b/apps/docs/public/updates/2026-06-15.md @@ -8,14 +8,14 @@ _15 июня 2026_ Новые и обновлённые методы для ботов: -- [Новый бот](POST /bots) -- [Информация о боте](GET /bots/{id}) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Информация о боте](/api/bots/get) +- [Редактирование бота](/api/bots/update) Появилась поддержка голосовых сообщений. В сообщении возвращается объект `voice_content` с длительностью, формой волны и расшифровкой, а при отправке файла с `file_type` = `voice` принимаются параметры `duration_ms` и `waveform`. -- [Новое сообщение](POST /messages) -- [Редактирование сообщения](PUT /messages/{id}) +- [Новое сообщение](/api/messages/create) +- [Редактирование сообщения](/api/messages/update) В payload вебхука реакции поле `created_at` теперь приходит и при удалении реакции. Также в деталях события аудита DLP поле `action_message` может быть `null`, если у действия правила не задан текст. diff --git a/apps/docs/public/updates/2026-06-16.md b/apps/docs/public/updates/2026-06-16.md index af6cfe9e8..8c400f6ea 100644 --- a/apps/docs/public/updates/2026-06-16.md +++ b/apps/docs/public/updates/2026-06-16.md @@ -6,12 +6,12 @@ _16 июня 2026_ Теперь при создании и редактировании бота можно задать скоупы его токена — параметр `scopes`. Если он не указан, бот получает набор по умолчанию. Текущие скоупы бота возвращаются в объекте бота в поле `scopes`. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) Бот может самостоятельно изменить `URL` своего исходящего вебхука своим же токеном — без участия администратора и без знания собственного `user_id`. Для этого нужен скоуп `bot_self:webhook:write`. -- [Саморегистрация вебхука бота](PUT /bot/webhook) +- [Саморегистрация вебхука бота](/api/bots/update-webhook) ### CLI v2026.6.1 diff --git a/apps/docs/public/updates/2026-06-19.md b/apps/docs/public/updates/2026-06-19.md index 25747c040..5fdb0df24 100644 --- a/apps/docs/public/updates/2026-06-19.md +++ b/apps/docs/public/updates/2026-06-19.md @@ -6,13 +6,13 @@ _19 июня 2026_ При создании и редактировании бота теперь можно настроить его входящий вебхук: шаблон форматирования `template`, шаблонизатор `template_engine` (`liquid` или `mustache`), поле верификации `challenge_key` и показ превью ссылок `link_preview_enabled`. Эти же поля возвращаются в объекте бота. Подробнее о шаблонах и верификации — в гайде [Входящие вебхуки](/guides/incoming-webhooks). -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) -- [Информация о боте](GET /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) +- [Информация о боте](/api/bots/get) В поиске сообщений появился параметр `sort` — сортировка результатов: `created_at` (по дате создания, по умолчанию) или `relevance` (по релевантности). -- [Поиск сообщений](GET /search/messages) +- [Поиск сообщений](/api/search/list-messages) ### SDK v1.0.24 diff --git a/apps/docs/public/updates/2026-06-24.md b/apps/docs/public/updates/2026-06-24.md index 4ecc0c842..5d4bfa8d7 100644 --- a/apps/docs/public/updates/2026-06-24.md +++ b/apps/docs/public/updates/2026-06-24.md @@ -4,20 +4,20 @@ _24 июня 2026_ -Токен бота теперь можно перевыпускать через API. Метод [Ротация токена бота](POST /bots/{id}/recreate_token) доступен администратору, владельцу компании или создателю бота по скоупу `bots:write`. Метод [Ротация собственного токена бота](POST /bot/recreate_token) позволяет боту перевыпустить токен самому себе по скоупу `bot_self:write`. Прежний токен инвалидируется сразу, новый возвращается в ответе один раз — сохраните его. +Токен бота теперь можно перевыпускать через API. Метод [Ротация токена бота](/api/bots/recreate-token) доступен администратору, владельцу компании или создателю бота по скоупу `bots:write`. Метод [Ротация собственного токена бота](/api/bots/recreate-token-self) позволяет боту перевыпустить токен самому себе по скоупу `bot_self:write`. Прежний токен инвалидируется сразу, новый возвращается в ответе один раз — сохраните его. -- [Ротация токена бота](POST /bots/{id}/recreate_token) -- [Ротация собственного токена бота](POST /bot/recreate_token) +- [Ротация токена бота](/api/bots/recreate-token) +- [Ротация собственного токена бота](/api/bots/recreate-token-self) -При создании и редактировании бота добавились две настройки вебхука: `ignore_self_messages` — игнорировать входящие сообщения, отправленные самим ботом (защита от зацикливания), и `events_history_enabled` — сохранять историю событий для получения через метод [История событий](GET /webhooks/events). Оба поля также возвращаются в объекте бота. +При создании и редактировании бота добавились две настройки вебхука: `ignore_self_messages` — игнорировать входящие сообщения, отправленные самим ботом (защита от зацикливания), и `events_history_enabled` — сохранять историю событий для получения через метод [История событий](/api/bots/list-events). Оба поля также возвращаются в объекте бота. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) -- [Информация о боте](GET /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) +- [Информация о боте](/api/bots/get) В журнале аудита появились новые типы событий, связанные с управлением ботами: `bot_token_recreated` (ротация токена), `bot_scopes_updated` (изменение скоупов токена) и `bot_webhook_settings_updated` (изменение настроек вебхука). Их можно фильтровать параметром `event_key`. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### Generator v1.1.8 diff --git a/apps/docs/public/updates/2026-07-07.md b/apps/docs/public/updates/2026-07-07.md index 56b8b2193..54a4bfa12 100644 --- a/apps/docs/public/updates/2026-07-07.md +++ b/apps/docs/public/updates/2026-07-07.md @@ -4,25 +4,25 @@ _07 июля 2026_ -Появились методы для управления ботами. Метод [Список ботов](GET /bots) возвращает ботов, которые вы можете редактировать, с поиском по имени. Метод [Удаление бота](DELETE /bots/{id}) удаляет бота: прежний токен сразу инвалидируется, бот исключается из чатов, его исходящий вебхук удаляется. Оба метода требуют скоуп `bots:read` и `bots:write` соответственно. +Появились методы для управления ботами. Метод [Список ботов](/api/bots/list) возвращает ботов, которые вы можете редактировать, с поиском по имени. Метод [Удаление бота](/api/bots/delete) удаляет бота: прежний токен сразу инвалидируется, бот исключается из чатов, его исходящий вебхук удаляется. Оба метода требуют скоуп `bots:read` и `bots:write` соответственно. -- [Список ботов](GET /bots) -- [Удаление бота](DELETE /bots/{id}) +- [Список ботов](/api/bots/list) +- [Удаление бота](/api/bots/delete) При создании и редактировании бота добавились настройки прав доступа: `who_can_add` — кто может добавлять бота в чаты (`creator`, `creator_admin`, `creator_admin_user`, `anyone`), и `can_edit` — роли, которым, помимо создателя, разрешено редактировать настройки бота (`admin`, `chat_owners`). При создании также можно передать `single_chat` — ограничить бота одной беседой или каналом (личные чаты и треды в ограничение не входят). Все три поля возвращаются в объекте бота. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) Появился новый тип исходящего вебхука — события видеозвонков: `video_call_started`, `video_call_finished` и `video_call_recording_ready`. Вебхук приходит для видеозвонков в чатах, где состоит бот. Подробнее о payload — в гайде [Настройка и типы событий](/guides/webhook/events#videozvonki). В журнале аудита появился тип события `bot_deleted` — удаление бота. Его можно фильтровать параметром `event_key`. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) В поиске сотрудников у параметра `sort` появилось значение `creation` — сортировка по дате создания (в дополнение к `by_score` и `alphabetical`). -- [Поиск сотрудников](GET /search/users) +- [Поиск сотрудников](/api/search/list-users) ### SDK v1.0.26 diff --git a/apps/docs/public/updates/2026-07-24.md b/apps/docs/public/updates/2026-07-24.md index fea3cf86e..1798e61da 100644 --- a/apps/docs/public/updates/2026-07-24.md +++ b/apps/docs/public/updates/2026-07-24.md @@ -4,13 +4,13 @@ _24 июля 2026_ -Появился метод [Новый самостоятельный тред](POST /threads) — создание треда, не связанного с сообщением. Тело запроса не требуется, создатель становится единственным участником треда. Метод требует скоуп `threads:create`. Поскольку у такого треда нет исходного сообщения, поля `message_id` и `message_chat_id` в объекте треда теперь могут возвращаться как `null` — это касается всех методов работы с тредами. +Появился метод [Новый самостоятельный тред](/api/threads/create) — создание треда, не связанного с сообщением. Тело запроса не требуется, создатель становится единственным участником треда. Метод требует скоуп `threads:create`. Поскольку у такого треда нет исходного сообщения, поля `message_id` и `message_chat_id` в объекте треда теперь могут возвращаться как `null` — это касается всех методов работы с тредами. -- [Новый самостоятельный тред](POST /threads) +- [Новый самостоятельный тред](/api/threads/create) В журнале аудита появились типы событий видеозвонков: `video_call_started`, `video_call_finished` и `video_call_recording_ready`. Их можно фильтровать параметром `event_key`. В деталях события возвращаются `chat_id`, длительность и (для записи) размер файла. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### SDK v1.0.27 diff --git a/apps/docs/public/updates/2026-07-28.md b/apps/docs/public/updates/2026-07-28.md new file mode 100644 index 000000000..f9ca43993 --- /dev/null +++ b/apps/docs/public/updates/2026-07-28.md @@ -0,0 +1,63 @@ +> Это Markdown-версия конкретной страницы. Для контекста за её пределами (правила API, полный перечень методов, авторизация) ОБЯЗАТЕЛЬНО открой [llms.txt](https://dev.pachca.com/llms.txt) перед ответом — это сэкономит токены и предотвратит неполный ответ. + +# Уточнения в описании API + +_28 июля 2026_ + +Подробнее описали поведение нескольких методов и полей. Работа API не менялась. + +Были уточнены следующие методы: + +- [Журнал аудита](/api/security/list) — параметр `end_time` включает верхнюю + границу: выборка за период захватывает событие, попавшее ровно на неё. +- [Мой статус](/api/profile/get-status) и [Статус сотрудника](/api/users/get-status) + — если статус не установлен, метод отвечает `200` и телом `null`. + +Уточнены описания полей моделей: + +- У 32 полей описано, в каком случае приходит `null`. Например, + `last_activity_at` пуст, пока сотрудник ни разу не заходил в Пачку. +- `display_avatar_url` и `display_name` приходят только у сообщений от ботов. +- `name` у реакции заполнено всегда. +- `last_name`, `department` и `title` у незаполненного значения приходят как + `null` либо как пустая строка. +- `first_name` приходит как `null`, пока приглашённый сотрудник не завершил + регистрацию, то есть пока `invite_status` равен `sent`. +- `value` у дополнительного поля приходит как `null`, если поле не заполнено. + Число передаётся строкой, дата — в формате ISO 8601. + +### SDK v1.0.28 + +- Поле `details` в журнале аудита (`GET /audit_events`) читается во всех языках +- Ошибки API разбираются в типизированный `ApiError`: поле `payload` принимает вложенный объект +- Python: блоки представлений (`ViewBlockUnion`) не теряют данные +- Примеры из README компилируются +- Union без общего поля-дискриминатора разбирается по составу полей. В Go у такого union появилось поле `Raw` с исходным JSON +- `first_name` у сотрудника, `value` у дополнительного поля, `display_avatar_url` и `display_name` у сообщения стали опциональными +- `Reaction.name` больше не nullable +- У 32 полей описано, когда API возвращает `null`; исправлены примеры `callback_id` и `private_metadata` для форм + +### Generator v1.1.10 + +- Эмиттеры Go, C#, Swift, Kotlin и Python умеют union без дискриминатора — вариант выбирается по составу полей +- Дискриминатор union определяется по всем членам сразу: поле принимается, только если литерал есть у каждого +- Открытый `additionalProperties` даёт значение произвольного типа, а не строку. В Kotlin для него используется `JsonElement` + +### CLI v2026.7.2 + +- `files direct-url`: файл добавляется в форму последним +- `files direct-url` не падает при успешной загрузке +- Явный `--profile` не перебивается переменной `PACHCA_TOKEN` +- Запись больше не повторяется автоматически при 503 +- `chats download-export`: имя файла из `Content-Disposition` не уводит запись за пределы указанной папки +- `-o csv`: ячейки с `=`, `+`, `-`, `@` экранируются, объекты и массивы выводятся как JSON + +### n8n Node v2.0.16 + +- Запись (`POST`/`PATCH`) больше не повторяется автоматически при 5xx +- `Bot`: ресурс открывается на `Get Many` вместо `Recreate own bot token` +- `User`: у операций со статусом и аватаркой вернулся выбор сотрудника вместо числового поля +- `User` → `Update Avatar` и `Chat` → `Download Export` работают при выборе сущности из списка или по ссылке +- Выбор сотрудника: список открывается сразу, без ввода текста +- Пагинация и поиск чатов: курсор кодируется, доступны результаты со второй страницы и далее +- Триггер: вебхук без `webhook_timestamp` отклоняется, если задан секрет подписи diff --git a/apps/docs/public/updates/season/autumn-2025.md b/apps/docs/public/updates/season/autumn-2025.md index 5113ca4f3..5abab608a 100644 --- a/apps/docs/public/updates/season/autumn-2025.md +++ b/apps/docs/public/updates/season/autumn-2025.md @@ -8,8 +8,8 @@ _20 ноября 2025_ Были добавлены новые методы: -- [История событий](GET /webhooks/events) -- [Удаление события](DELETE /webhooks/events/{id}) +- [История событий](/api/bots/list-events) +- [Удаление события](/api/bots/remove-event) С помощью этих методов вы можете получить список событий бота и удалить событие из этого списка. @@ -26,7 +26,7 @@ _09 сентября 2025_ Был обновлен следующий метод: -- [Список сотрудников](GET /users) +- [Список сотрудников](/api/users/list) ### Редактирование бота @@ -34,6 +34,6 @@ _01 сентября 2025_ Был добавлен новый метод: -- [Редактирование бота](PUT /bots/{id}) +- [Редактирование бота](/api/bots/update) С помощью этого метода вы можете изменить параметры ботов, к которым у вас есть доступ. diff --git a/apps/docs/public/updates/season/spring-2025.md b/apps/docs/public/updates/season/spring-2025.md index abf26b14f..23a465a12 100644 --- a/apps/docs/public/updates/season/spring-2025.md +++ b/apps/docs/public/updates/season/spring-2025.md @@ -8,7 +8,7 @@ _21 мая 2025_ Был добавлен новый метод: -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) С помощью этого метода вы можете отслеживать и получать данные о важных событиях, происходящих в вашем пространстве — активность пользователей и системные изменения. @@ -35,7 +35,7 @@ _07 апреля 2025_ Был обновлен следующий метод: -- [Список сообщений чата](GET /chats/{id}/messages) +- [Список сообщений чата](/api/messages/list) ### Экспорт сообщений @@ -43,7 +43,7 @@ _21 марта 2025_ Был добавлен новый метод: -- [Экспорт сообщений](POST /chats/exports) +- [Экспорт сообщений](/api/chats/request-export) С помощью этого метода Владелец пространства на тарифе «Корпорация» может запросить экспорт сообщений пространства в формате JSON файлов, упакованных в zip архив. @@ -53,7 +53,7 @@ _18 марта 2025_ Был добавлен новый метод: -- [Свой профиль](GET /profile) +- [Свой профиль](/api/profile/get) С помощью этого метода вы можете получить всю информацию о пользователе, `access_token` которого используется. @@ -69,7 +69,7 @@ _17 марта 2025_ Был обновлен следующий метод: -- [Список чатов](GET /chats) +- [Список чатов](/api/chats/list) ### Аватарки и имена отправителей diff --git a/apps/docs/public/updates/season/spring-2026.md b/apps/docs/public/updates/season/spring-2026.md index 1b316e95b..f983270c9 100644 --- a/apps/docs/public/updates/season/spring-2026.md +++ b/apps/docs/public/updates/season/spring-2026.md @@ -14,7 +14,7 @@ _20 мая 2026_ Был добавлен новый метод: -- [Список тредов](GET /threads) +- [Список тредов](/api/threads/list) С помощью этого метода вы можете получить доступные треды и собирать по ним сводки и дайджесты за период. @@ -38,7 +38,7 @@ _17 мая 2026_ Был обновлен следующий метод: -- [Новый сотрудник](POST /users) +- [Новый сотрудник](/api/users/create) В CLI добавлены команды для просмотра списка всех эндпоинтов и справки по каждому — не нужно знать эндпоинт заранее или искать его в документации. Данные генерируются из той же OpenAPI-спецификации, из которой собран сам CLI, поэтому всегда совпадают с актуальным API. Для AI-агентов это ключевое: не нужно загружать документацию в контекст — агент запрашивает у CLI нужный метод и сразу его вызывает. @@ -74,17 +74,17 @@ _06 мая 2026_ Затронутые методы: -- [Список сотрудников](GET /users) -- [Список чатов](GET /chats) -- [Список участников чата](GET /chats/{id}/members) -- [Список сообщений чата](GET /messages) -- [Список реакций](GET /messages/{id}/reactions) -- [Список тегов сотрудников](GET /group_tags) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список напоминаний](GET /tasks) -- [Журнал аудита событий](GET /audit_events) -- [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) -- [История событий](GET /webhooks/events) +- [Список сотрудников](/api/users/list) +- [Список чатов](/api/chats/list) +- [Список участников чата](/api/members/list) +- [Список сообщений чата](/api/messages/list) +- [Список реакций](/api/reactions/list) +- [Список тегов сотрудников](/api/group-tags/list) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список напоминаний](/api/tasks/list) +- [Журнал аудита событий](/api/security/list) +- [Список прочитавших сообщение](/api/read-member/list-readers) +- [История событий](/api/bots/list-events) В вебхуке [Разворачивание ссылок](/guides/link-previews) каждый объект массива `links` теперь содержит поле `skip: boolean`. Если значение `true` — автор сообщения скрыл превью для этой ссылки, и бот не должен её разворачивать. Это позволяет уважать выбор пользователя и не генерировать нежелательные превью. @@ -122,14 +122,14 @@ _04 мая 2026_ Уточнены типы полей модели `User`: поля `last_name`, `email`, `phone_number`, `department`, `title`, `time_zone` и `last_activity_at` теперь корректно объявлены как nullable. Поля `email` и `phone_number` возвращают `null` для ботов без права просмотра персональных данных. -В payload трёх исходящих вебхуков (`reaction_new`, `reaction_delete`, `view_submit`) добавлено поле `chat_id` — идентификатор чата, в котором произошло событие. Поле всегда присутствует в payload, в редких случаях может прийти как `null`. Это убирает необходимость в дополнительном запросе [Информация о сообщении](GET /messages/{id}) для определения чата по событию. Подробнее о поведении `chat_id` для `view_submit` — в разделе [Заполнение формы](/guides/webhook/events#zapolnenie-formy). +В payload трёх исходящих вебхуков (`reaction_new`, `reaction_delete`, `view_submit`) добавлено поле `chat_id` — идентификатор чата, в котором произошло событие. Поле всегда присутствует в payload, в редких случаях может прийти как `null`. Это убирает необходимость в дополнительном запросе [Информация о сообщении](/api/messages/get) для определения чата по событию. Подробнее о поведении `chat_id` для `view_submit` — в разделе [Заполнение формы](/guides/webhook/events#zapolnenie-formy). Были обновлены следующие методы: -- [Список сотрудников](GET /users) -- [Информация о сотруднике](GET /users/{id}) -- [Новый сотрудник](POST /users) -- [Редактирование сотрудника](PUT /users/{id}) +- [Список сотрудников](/api/users/list) +- [Информация о сотруднике](/api/users/get) +- [Новый сотрудник](/api/users/create) +- [Редактирование сотрудника](/api/users/update) ### n8n Node v2.0.6 @@ -191,7 +191,7 @@ _13 апреля 2026_ _08 апреля 2026_ -При [Отправке сообщений](POST /messages) и [Редактировании сообщений](PUT /messages/{id}) теперь можно упоминать пользователей по идентификатору: просто вставьте `<@user_id>` в текст сообщения (например, `<@3876>`) и это автоматически преобразуется это в `@nickname`. Это удобно для интеграций, когда идентификатор пользователя уже известен и не нужно дополнительно искать его никнейм. +При [Отправке сообщений](/api/messages/create) и [Редактировании сообщений](/api/messages/update) теперь можно упоминать пользователей по идентификатору: просто вставьте `<@user_id>` в текст сообщения (например, `<@3876>`) и это автоматически преобразуется это в `@nickname`. Это удобно для интеграций, когда идентификатор пользователя уже известен и не нужно дополнительно искать его никнейм. ### CLI v2026.4.1 @@ -210,14 +210,14 @@ _07 апреля 2026_ Были добавлены новые методы для управления аватарами: -- [Загрузка своего аватара](PUT /profile/avatar) -- [Удаление своего аватара](DELETE /profile/avatar) -- [Загрузка аватара сотрудника](PUT /users/{user_id}/avatar) -- [Удаление аватара сотрудника](DELETE /users/{user_id}/avatar) +- [Загрузка своего аватара](/api/profile/update-avatar) +- [Удаление своего аватара](/api/profile/delete-avatar) +- [Загрузка аватара сотрудника](/api/users/update-avatar) +- [Удаление аватара сотрудника](/api/users/remove-avatar) С помощью этих методов вы можете загружать и удалять аватары для своего профиля и для сотрудников вашей компании. -В методах [Список чатов](GET /chats) и [Список сообщений чата](GET /messages) добавлен новый формат параметров сортировки: `sort` (поле сортировки) и `order` (направление: `asc` или `desc`). +В методах [Список чатов](/api/chats/list) и [Список сообщений чата](/api/messages/list) добавлен новый формат параметров сортировки: `sort` (поле сортировки) и `order` (направление: `asc` или `desc`). ### CLI v2026.4.0 @@ -275,23 +275,23 @@ _21 марта 2026_ Во все методы, требующие оплаченного тарифа, добавлен ответ `402 Payment Required`. -В методах [Новый сотрудник](POST /users) и [Редактирование сотрудника](PUT /users/{id}) уточнены допустимые значения поля `role`: `admin`, `user` и `multi_guest`. Значение `guest` недоступно для установки через API — оно присутствует только в ответах. +В методах [Новый сотрудник](/api/users/create) и [Редактирование сотрудника](/api/users/update) уточнены допустимые значения поля `role`: `admin`, `user` и `multi_guest`. Значение `guest` недоступно для установки через API — оно присутствует только в ответах. -Поле `link_preview` в запросе [Отправить сообщение](POST /messages) перенесено на верхний уровень тела запроса — отдельно от объекта `message`. +Поле `link_preview` в запросе [Отправить сообщение](/api/messages/create) перенесено на верхний уровень тела запроса — отдельно от объекта `message`. -Метод [Закрепление сообщения](POST /messages/{id}/pin) при попытке закрепить уже закреплённое сообщение возвращает `422 Unprocessable Entity`. +Метод [Закрепление сообщения](/api/messages/pin) при попытке закрепить уже закреплённое сообщение возвращает `422 Unprocessable Entity`. -Параметры `start_time` и `end_time` в методе [Журнал аудита событий](GET /audit_events) стали необязательными — без них возвращаются все события. +Параметры `start_time` и `end_time` в методе [Журнал аудита событий](/api/security/list) стали необязательными — без них возвращаются все события. Уточнён тип поля `name` в модели [реакции](/api/models#reaktsiya-na-soobschenie): `string | null` вместо опционального. Были обновлены следующие методы: -- [Новое сообщение](POST /messages) -- [Новый сотрудник](POST /users) -- [Редактирование сотрудника](PUT /users/{id}) -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Журнал аудита событий](GET /audit_events) +- [Новое сообщение](/api/messages/create) +- [Новый сотрудник](/api/users/create) +- [Редактирование сотрудника](/api/users/update) +- [Закрепление сообщения](/api/messages/pin) +- [Журнал аудита событий](/api/security/list) ### CLI v2026.3.10 @@ -315,9 +315,9 @@ _19 марта 2026_ Скоупы персональных токенов теперь можно изменять после создания — в настройках токена. Раньше для изменения набора разрешений токен нужно было пересоздавать. Подробнее в разделе [Авторизация](/api/authorization#skoupy). -Метод [Закрепление сообщения](POST /messages/{id}/pin) теперь возвращает `204 No Content` вместо `201 Created`. +Метод [Закрепление сообщения](/api/messages/pin) теперь возвращает `204 No Content` вместо `201 Created`. -Поле `thread` в модели [сообщения](/api/models#message) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](POST /messages/{id}/thread) и [Информация о треде](GET /threads/{id}). +Поле `thread` в модели [сообщения](/api/models#soobschenie) теперь содержит только `id` и `chat_id`. Полная модель треда (с `message_id`, `message_chat_id`, `updated_at`) возвращается в методах [Создание треда](/api/threads/add) и [Информация о треде](/api/threads/get). Поле `payload` в модели ошибки валидации теперь имеет тип `object | null` вместо `string | null` и содержит структурированные данные — идентификатор кастомного свойства при ошибке поля или параметры авторизации. @@ -325,10 +325,10 @@ _19 марта 2026_ Были обновлены следующие методы: -- [Закрепление сообщения](POST /messages/{id}/pin) -- [Новое сообщение](POST /messages) -- [Информация о сообщении](GET /messages/{id}) -- [Список сообщений чата](GET /messages) +- [Закрепление сообщения](/api/messages/pin) +- [Новое сообщение](/api/messages/create) +- [Информация о сообщении](/api/messages/get) +- [Список сообщений чата](/api/messages/list) ### CLI v2026.3.9 diff --git a/apps/docs/public/updates/season/summer-2025.md b/apps/docs/public/updates/season/summer-2025.md index adf2386a3..7cc531769 100644 --- a/apps/docs/public/updates/season/summer-2025.md +++ b/apps/docs/public/updates/season/summer-2025.md @@ -23,7 +23,7 @@ _20 августа 2025_ Был обновлен следующий метод: -- [Список чатов](GET /chats) +- [Список чатов](/api/chats/list) ### Формы @@ -32,7 +32,7 @@ _12 августа 2025_ Был добавлен новый раздел, посвященный работе с формами. Вы можете ознакомиться со следующими страницами: - [Формы](/guides/forms/overview) -- [Открытие представления](POST /views/open) +- [Открытие представления](/api/views/open) - [Получение результатов](/guides/webhook/overview) С помощью форм вы можете получать от пользователей данные через заданный вами набор полей и отображать дополнительную информацию в модальных окнах по запросу пользователей. @@ -49,12 +49,12 @@ _07 августа 2025_ Были обновлены следующие методы: -- [Новый сотрудник](POST /users) -- [Информация о сотруднике](GET /users/{id}) -- [Список сотрудников](GET /users) -- [Редактирование сотрудника](PUT /users/{id}) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список участников чата](GET /chats/{id}/members) +- [Новый сотрудник](/api/users/create) +- [Информация о сотруднике](/api/users/get) +- [Список сотрудников](/api/users/list) +- [Редактирование сотрудника](/api/users/update) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список участников чата](/api/members/list) ### Список участников чата и название реакции @@ -62,7 +62,7 @@ _02 июня 2025_ Был добавлен новый метод: -- [Список участников чата](GET /chats/{id}/members) +- [Список участников чата](/api/members/list) С помощью этого метода можно запросить список участников чата с фильтрацией по ролям в чате. diff --git a/apps/docs/public/updates/season/summer-2026.md b/apps/docs/public/updates/season/summer-2026.md index 54d1e0fa5..d453fe766 100644 --- a/apps/docs/public/updates/season/summer-2026.md +++ b/apps/docs/public/updates/season/summer-2026.md @@ -2,17 +2,79 @@ # ☀️ Лето 2026 +### Уточнения в описании API + +_28 июля 2026_ + +Подробнее описали поведение нескольких методов и полей. Работа API не менялась. + +Были уточнены следующие методы: + +- [Журнал аудита](/api/security/list) — параметр `end_time` включает верхнюю + границу: выборка за период захватывает событие, попавшее ровно на неё. +- [Мой статус](/api/profile/get-status) и [Статус сотрудника](/api/users/get-status) + — если статус не установлен, метод отвечает `200` и телом `null`. + +Уточнены описания полей моделей: + +- У 32 полей описано, в каком случае приходит `null`. Например, + `last_activity_at` пуст, пока сотрудник ни разу не заходил в Пачку. +- `display_avatar_url` и `display_name` приходят только у сообщений от ботов. +- `name` у реакции заполнено всегда. +- `last_name`, `department` и `title` у незаполненного значения приходят как + `null` либо как пустая строка. +- `first_name` приходит как `null`, пока приглашённый сотрудник не завершил + регистрацию, то есть пока `invite_status` равен `sent`. +- `value` у дополнительного поля приходит как `null`, если поле не заполнено. + Число передаётся строкой, дата — в формате ISO 8601. + +### SDK v1.0.28 + +- Поле `details` в журнале аудита (`GET /audit_events`) читается во всех языках +- Ошибки API разбираются в типизированный `ApiError`: поле `payload` принимает вложенный объект +- Python: блоки представлений (`ViewBlockUnion`) не теряют данные +- Примеры из README компилируются +- Union без общего поля-дискриминатора разбирается по составу полей. В Go у такого union появилось поле `Raw` с исходным JSON +- `first_name` у сотрудника, `value` у дополнительного поля, `display_avatar_url` и `display_name` у сообщения стали опциональными +- `Reaction.name` больше не nullable +- У 32 полей описано, когда API возвращает `null`; исправлены примеры `callback_id` и `private_metadata` для форм + +### Generator v1.1.10 + +- Эмиттеры Go, C#, Swift, Kotlin и Python умеют union без дискриминатора — вариант выбирается по составу полей +- Дискриминатор union определяется по всем членам сразу: поле принимается, только если литерал есть у каждого +- Открытый `additionalProperties` даёт значение произвольного типа, а не строку. В Kotlin для него используется `JsonElement` + +### CLI v2026.7.2 + +- `files direct-url`: файл добавляется в форму последним +- `files direct-url` не падает при успешной загрузке +- Явный `--profile` не перебивается переменной `PACHCA_TOKEN` +- Запись больше не повторяется автоматически при 503 +- `chats download-export`: имя файла из `Content-Disposition` не уводит запись за пределы указанной папки +- `-o csv`: ячейки с `=`, `+`, `-`, `@` экранируются, объекты и массивы выводятся как JSON + +### n8n Node v2.0.16 + +- Запись (`POST`/`PATCH`) больше не повторяется автоматически при 5xx +- `Bot`: ресурс открывается на `Get Many` вместо `Recreate own bot token` +- `User`: у операций со статусом и аватаркой вернулся выбор сотрудника вместо числового поля +- `User` → `Update Avatar` и `Chat` → `Download Export` работают при выборе сущности из списка или по ссылке +- Выбор сотрудника: список открывается сразу, без ввода текста +- Пагинация и поиск чатов: курсор кодируется, доступны результаты со второй страницы и далее +- Триггер: вебхук без `webhook_timestamp` отклоняется, если задан секрет подписи + ### Самостоятельные треды и аудит видеозвонков _24 июля 2026_ -Появился метод [Новый самостоятельный тред](POST /threads) — создание треда, не связанного с сообщением. Тело запроса не требуется, создатель становится единственным участником треда. Метод требует скоуп `threads:create`. Поскольку у такого треда нет исходного сообщения, поля `message_id` и `message_chat_id` в объекте треда теперь могут возвращаться как `null` — это касается всех методов работы с тредами. +Появился метод [Новый самостоятельный тред](/api/threads/create) — создание треда, не связанного с сообщением. Тело запроса не требуется, создатель становится единственным участником треда. Метод требует скоуп `threads:create`. Поскольку у такого треда нет исходного сообщения, поля `message_id` и `message_chat_id` в объекте треда теперь могут возвращаться как `null` — это касается всех методов работы с тредами. -- [Новый самостоятельный тред](POST /threads) +- [Новый самостоятельный тред](/api/threads/create) В журнале аудита появились типы событий видеозвонков: `video_call_started`, `video_call_finished` и `video_call_recording_ready`. Их можно фильтровать параметром `event_key`. В деталях события возвращаются `chat_id`, длительность и (для записи) размер файла. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### SDK v1.0.27 @@ -34,25 +96,25 @@ _24 июля 2026_ _07 июля 2026_ -Появились методы для управления ботами. Метод [Список ботов](GET /bots) возвращает ботов, которые вы можете редактировать, с поиском по имени. Метод [Удаление бота](DELETE /bots/{id}) удаляет бота: прежний токен сразу инвалидируется, бот исключается из чатов, его исходящий вебхук удаляется. Оба метода требуют скоуп `bots:read` и `bots:write` соответственно. +Появились методы для управления ботами. Метод [Список ботов](/api/bots/list) возвращает ботов, которые вы можете редактировать, с поиском по имени. Метод [Удаление бота](/api/bots/delete) удаляет бота: прежний токен сразу инвалидируется, бот исключается из чатов, его исходящий вебхук удаляется. Оба метода требуют скоуп `bots:read` и `bots:write` соответственно. -- [Список ботов](GET /bots) -- [Удаление бота](DELETE /bots/{id}) +- [Список ботов](/api/bots/list) +- [Удаление бота](/api/bots/delete) При создании и редактировании бота добавились настройки прав доступа: `who_can_add` — кто может добавлять бота в чаты (`creator`, `creator_admin`, `creator_admin_user`, `anyone`), и `can_edit` — роли, которым, помимо создателя, разрешено редактировать настройки бота (`admin`, `chat_owners`). При создании также можно передать `single_chat` — ограничить бота одной беседой или каналом (личные чаты и треды в ограничение не входят). Все три поля возвращаются в объекте бота. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) Появился новый тип исходящего вебхука — события видеозвонков: `video_call_started`, `video_call_finished` и `video_call_recording_ready`. Вебхук приходит для видеозвонков в чатах, где состоит бот. Подробнее о payload — в гайде [Настройка и типы событий](/guides/webhook/events#videozvonki). В журнале аудита появился тип события `bot_deleted` — удаление бота. Его можно фильтровать параметром `event_key`. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) В поиске сотрудников у параметра `sort` появилось значение `creation` — сортировка по дате создания (в дополнение к `by_score` и `alphabetical`). -- [Поиск сотрудников](GET /search/users) +- [Поиск сотрудников](/api/search/list-users) ### SDK v1.0.26 @@ -85,20 +147,20 @@ _07 июля 2026_ _24 июня 2026_ -Токен бота теперь можно перевыпускать через API. Метод [Ротация токена бота](POST /bots/{id}/recreate_token) доступен администратору, владельцу компании или создателю бота по скоупу `bots:write`. Метод [Ротация собственного токена бота](POST /bot/recreate_token) позволяет боту перевыпустить токен самому себе по скоупу `bot_self:write`. Прежний токен инвалидируется сразу, новый возвращается в ответе один раз — сохраните его. +Токен бота теперь можно перевыпускать через API. Метод [Ротация токена бота](/api/bots/recreate-token) доступен администратору, владельцу компании или создателю бота по скоупу `bots:write`. Метод [Ротация собственного токена бота](/api/bots/recreate-token-self) позволяет боту перевыпустить токен самому себе по скоупу `bot_self:write`. Прежний токен инвалидируется сразу, новый возвращается в ответе один раз — сохраните его. -- [Ротация токена бота](POST /bots/{id}/recreate_token) -- [Ротация собственного токена бота](POST /bot/recreate_token) +- [Ротация токена бота](/api/bots/recreate-token) +- [Ротация собственного токена бота](/api/bots/recreate-token-self) -При создании и редактировании бота добавились две настройки вебхука: `ignore_self_messages` — игнорировать входящие сообщения, отправленные самим ботом (защита от зацикливания), и `events_history_enabled` — сохранять историю событий для получения через метод [История событий](GET /webhooks/events). Оба поля также возвращаются в объекте бота. +При создании и редактировании бота добавились две настройки вебхука: `ignore_self_messages` — игнорировать входящие сообщения, отправленные самим ботом (защита от зацикливания), и `events_history_enabled` — сохранять историю событий для получения через метод [История событий](/api/bots/list-events). Оба поля также возвращаются в объекте бота. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) -- [Информация о боте](GET /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) +- [Информация о боте](/api/bots/get) В журнале аудита появились новые типы событий, связанные с управлением ботами: `bot_token_recreated` (ротация токена), `bot_scopes_updated` (изменение скоупов токена) и `bot_webhook_settings_updated` (изменение настроек вебхука). Их можно фильтровать параметром `event_key`. -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### Generator v1.1.8 @@ -132,13 +194,13 @@ _19 июня 2026_ При создании и редактировании бота теперь можно настроить его входящий вебхук: шаблон форматирования `template`, шаблонизатор `template_engine` (`liquid` или `mustache`), поле верификации `challenge_key` и показ превью ссылок `link_preview_enabled`. Эти же поля возвращаются в объекте бота. Подробнее о шаблонах и верификации — в гайде [Входящие вебхуки](/guides/incoming-webhooks). -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) -- [Информация о боте](GET /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) +- [Информация о боте](/api/bots/get) В поиске сообщений появился параметр `sort` — сортировка результатов: `created_at` (по дате создания, по умолчанию) или `relevance` (по релевантности). -- [Поиск сообщений](GET /search/messages) +- [Поиск сообщений](/api/search/list-messages) ### SDK v1.0.24 @@ -167,12 +229,12 @@ _16 июня 2026_ Теперь при создании и редактировании бота можно задать скоупы его токена — параметр `scopes`. Если он не указан, бот получает набор по умолчанию. Текущие скоупы бота возвращаются в объекте бота в поле `scopes`. -- [Новый бот](POST /bots) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Редактирование бота](/api/bots/update) Бот может самостоятельно изменить `URL` своего исходящего вебхука своим же токеном — без участия администратора и без знания собственного `user_id`. Для этого нужен скоуп `bot_self:webhook:write`. -- [Саморегистрация вебхука бота](PUT /bot/webhook) +- [Саморегистрация вебхука бота](/api/bots/update-webhook) ### CLI v2026.6.1 @@ -199,14 +261,14 @@ _15 июня 2026_ Новые и обновлённые методы для ботов: -- [Новый бот](POST /bots) -- [Информация о боте](GET /bots/{id}) -- [Редактирование бота](PUT /bots/{id}) +- [Новый бот](/api/bots/create) +- [Информация о боте](/api/bots/get) +- [Редактирование бота](/api/bots/update) Появилась поддержка голосовых сообщений. В сообщении возвращается объект `voice_content` с длительностью, формой волны и расшифровкой, а при отправке файла с `file_type` = `voice` принимаются параметры `duration_ms` и `waveform`. -- [Новое сообщение](POST /messages) -- [Редактирование сообщения](PUT /messages/{id}) +- [Новое сообщение](/api/messages/create) +- [Редактирование сообщения](/api/messages/update) В payload вебхука реакции поле `created_at` теперь приходит и при удалении реакции. Также в деталях события аудита DLP поле `action_message` может быть `null`, если у действия правила не задан текст. @@ -235,7 +297,7 @@ SDK стали точнее типизировать payload вебхуков и Был обновлен следующий метод: -- [История событий](GET /webhooks/events) +- [История событий](/api/bots/list-events) ### SDK v1.0.21 diff --git a/apps/docs/public/updates/season/winter-2025-26.md b/apps/docs/public/updates/season/winter-2025-26.md index d229c75b3..efdae618a 100644 --- a/apps/docs/public/updates/season/winter-2025-26.md +++ b/apps/docs/public/updates/season/winter-2025-26.md @@ -8,9 +8,9 @@ _27 февраля 2026_ Были добавлены новые методы для полнотекстового поиска по сотрудникам, чатам и сообщениям: -- [Поиск сотрудников](GET /search/users) -- [Поиск чатов](GET /search/chats) -- [Поиск сообщений](GET /search/messages) +- [Поиск сотрудников](/api/search/list-users) +- [Поиск чатов](/api/search/list-chats) +- [Поиск сообщений](/api/search/list-messages) С помощью этих методов вы можете искать по текстовому запросу с поддержкой фильтрации и курсорной пагинации. @@ -20,12 +20,12 @@ _27 февраля 2026_ Были обновлены следующие методы: -- [Новый свой статус](PUT /profile/status) -- [Новый статус сотрудника](PUT /users/{user_id}/status) -- [Новое сообщение](POST /messages) -- [Информация о сообщении](GET /messages/{id}) -- [Редактирование сообщения](PUT /messages/{id}) -- [Список сообщений чата](GET /messages) +- [Новый свой статус](/api/profile/update-status) +- [Новый статус сотрудника](/api/users/update-status) +- [Новое сообщение](/api/messages/create) +- [Информация о сообщении](/api/messages/get) +- [Редактирование сообщения](/api/messages/update) +- [Список сообщений чата](/api/messages/list) ### Режим «Нет на месте» и управление статусами @@ -35,14 +35,14 @@ _26 февраля 2026_ Были добавлены новые методы: -- [Статус сотрудника](GET /users/{user_id}/status) -- [Новый статус сотрудника](PUT /users/{user_id}/status) -- [Удаление статуса сотрудника](DELETE /users/{user_id}/status) +- [Статус сотрудника](/api/users/get-status) +- [Новый статус сотрудника](/api/users/update-status) +- [Удаление статуса сотрудника](/api/users/remove-status) Были обновлены следующие методы: -- [Свой статус](GET /profile/status) -- [Новый свой статус](PUT /profile/status) +- [Свой статус](/api/profile/get-status) +- [Новый свой статус](/api/profile/update-status) ### Привязка напоминаний к чатам @@ -52,10 +52,10 @@ _25 февраля 2026_ Были обновлены следующие методы: -- [Новое напоминание](POST /tasks) -- [Список напоминаний](GET /tasks) -- [Информация о напоминании](GET /tasks/{id}) -- [Редактирование напоминания](PUT /tasks/{id}) +- [Новое напоминание](/api/tasks/create) +- [Список напоминаний](/api/tasks/list) +- [Информация о напоминании](/api/tasks/get) +- [Редактирование напоминания](/api/tasks/update) ### Авторизация и скоупы @@ -65,7 +65,7 @@ _24 февраля 2026_ Был добавлен новый метод: -- [Информация о токене](GET /oauth/token/info) — получение информации о текущем OAuth токене, включая список скоупов, дату создания и последнего использования +- [Информация о токене](/api/oauth/token-info) — получение информации о текущем OAuth токене, включая список скоупов, дату создания и последнего использования Появился новый раздел документации — [Авторизация](/api/authorization). В нём описаны типы токенов, способы их создания, скоупы для персональных токенов и фиксированный набор скоупов для токенов ботов, а также ошибки авторизации. @@ -104,7 +104,7 @@ _20 февраля 2026_ Был обновлен следующий метод: -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### Аудит-события безопасности и токенов @@ -124,7 +124,7 @@ _19 февраля 2026_ Был обновлен следующий метод: -- [Журнал аудита событий](GET /audit_events) +- [Журнал аудита событий](/api/security/list) ### Курсорная пагинация @@ -134,18 +134,18 @@ _16 февраля 2026_ Были обновлены следующие методы: -- [Список тегов сотрудников](GET /group_tags) -- [Список сотрудников тега](GET /group_tags/{id}/users) -- [Список сообщений чата](GET /messages) -- [Список прочитавших сообщение](GET /messages/{id}/read_member_ids) -- [Список реакций](GET /messages/{id}/reactions) -- [Список напоминаний](GET /tasks) +- [Список тегов сотрудников](/api/group-tags/list) +- [Список сотрудников тега](/api/group-tags/list-users) +- [Список сообщений чата](/api/messages/list) +- [Список прочитавших сообщение](/api/read-member/list-readers) +- [Список реакций](/api/reactions/list) +- [Список напоминаний](/api/tasks/list) ### Добавление участников в тред _12 февраля 2026_ -Метод [Добавление пользователей](POST /chats/{id}/members) теперь поддерживает работу с тредами. Вы можете передать `chat_id` треда в качестве идентификатора чата, чтобы добавить участников в тред. +Метод [Добавление пользователей](/api/members/add) теперь поддерживает работу с тредами. Вы можете передать `chat_id` треда в качестве идентификатора чата, чтобы добавить участников в тред. ### Управление напоминаниями @@ -153,10 +153,10 @@ _09 февраля 2026_ Были добавлены новые методы: -- [Список напоминаний](GET /tasks) -- [Информация о напоминании](GET /tasks/{id}) -- [Редактирование напоминания](PUT /tasks/{id}) -- [Удаление напоминания](DELETE /tasks/{id}) +- [Список напоминаний](/api/tasks/list) +- [Информация о напоминании](/api/tasks/get) +- [Редактирование напоминания](/api/tasks/update) +- [Удаление напоминания](/api/tasks/delete) С помощью этих методов вы можете получать список напоминаний, просматривать, редактировать и удалять их. @@ -172,4 +172,4 @@ _29 января 2026_ Был обновлен следующий метод: -- [Список тегов сотрудников](GET /group_tags) +- [Список тегов сотрудников](/api/group-tags/list) diff --git a/apps/docs/redirects.ts b/apps/docs/redirects.ts index a4842579a..3a9ba10d8 100644 --- a/apps/docs/redirects.ts +++ b/apps/docs/redirects.ts @@ -5,6 +5,16 @@ type Redirect = { }; const redirects: Redirect[] = [ + // Гайд по Albato уехал в help-центр. Сам `/guides/albato` редиректит proxy.ts, + // но `.md`-двойник туда не доходит: matcher исключает всё, что кончается на + // `.md`. А llms.txt и skill.md обещают агентам, что `.md` можно дописать + // к любому адресу — поэтому вариант с расширением нужен здесь. + { + source: '/guides/albato.md', + destination: 'https://pachca.com/help-center/integrations/albato', + permanent: true, + }, + // ===== Корни разделов → стартовые страницы (иначе 404) ===== { source: '/api', destination: '/api/authorization', permanent: false }, { source: '/guides', destination: '/guides/quickstart', permanent: false }, diff --git a/apps/docs/scripts/check-anchors.mjs b/apps/docs/scripts/check-anchors.mjs new file mode 100644 index 000000000..3ba9a8760 --- /dev/null +++ b/apps/docs/scripts/check-anchors.mjs @@ -0,0 +1,168 @@ +#!/usr/bin/env node +/** + * Build gate: every in-repo `#anchor` link must point at a heading that exists. + * + * Anchors are generated from Cyrillic headings by `lib/utils/transliterate.ts` + * (`toSlug`). Hand-written links kept drifting to a different transliteration + * scheme — `й→j` instead of `y`, `х→kh` instead of `h`, `щ→shh` instead of + * `sch` — which produces a link that silently does nothing when clicked. There + * is no runtime error and no build warning, so 13 of them accumulated. + */ + +import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs'; +import { join, resolve } from 'node:path'; + +const DOCS = resolve(import.meta.dirname, '..'); +const CONTENT = join(DOCS, 'content'); + +// Mirror of lib/utils/transliterate.ts — kept in sync by the test below. +const TRANSLIT = { + а: 'a', + б: 'b', + в: 'v', + г: 'g', + д: 'd', + е: 'e', + ё: 'yo', + ж: 'zh', + з: 'z', + и: 'i', + й: 'y', + к: 'k', + л: 'l', + м: 'm', + н: 'n', + о: 'o', + п: 'p', + р: 'r', + с: 's', + т: 't', + у: 'u', + ф: 'f', + х: 'h', + ц: 'ts', + ч: 'ch', + ш: 'sh', + щ: 'sch', + ъ: '', + ы: 'y', + ь: '', + э: 'e', + ю: 'yu', + я: 'ya', +}; + +function toSlug(text) { + return text + .toLowerCase() + .split('') + .map((c) => TRANSLIT[c] ?? c) + .join('') + .replace(/\s+/g, '-') + .replace(/[^a-z0-9-]/g, '') + .replace(/-+/g, '-') + .replace(/^-|-$/g, ''); +} + +function walk(dir) { + const out = []; + for (const entry of readdirSync(dir)) { + const full = join(dir, entry); + if (statSync(full).isDirectory()) out.push(...walk(full)); + else if (entry.endsWith('.mdx') || entry.endsWith('.md')) out.push(full); + } + return out; +} + +/** content path → the site route it is served at. */ +function routeOf(file) { + const rel = file.slice(CONTENT.length + 1).replace(/\.(mdx|md)$/, ''); + if (rel.startsWith('updates/')) return `/${rel}`; + return `/${rel}`; +} + +const files = walk(CONTENT); + +// route → set of heading anchors on that page +const anchors = new Map(); +for (const file of files) { + const text = readFileSync(file, 'utf-8'); + const body = text.replace(/^---\n[\s\S]*?\n---\n/, ''); + const set = new Set(); + for (const m of body.matchAll(/^#{1,6}\s+(.+?)\s*$/gm)) { + // Strip inline markdown/JSX so the slug matches what the renderer produces. + const clean = m[1] + .replace(/`([^`]*)`/g, '$1') + .replace(/\[([^\]]*)\]\([^)]*\)/g, '$1') + .replace(/[*_]/g, '') + .trim(); + set.add(toSlug(clean)); + } + anchors.set(routeOf(file), set); +} + +const errors = []; +for (const file of files) { + const text = readFileSync(file, 'utf-8'); + for (const m of text.matchAll(/\]\((\/[^)\s#]*)?#([a-z0-9-]+)\)/g)) { + const target = m[1] || routeOf(file); + const anchor = m[2]; + // Only check pages we render from content/ — external and API routes vary. + if (!anchors.has(target)) continue; + const have = anchors.get(target); + if (have.has(anchor)) continue; + const line = text.slice(0, m.index).split('\n').length; + const near = [...have].filter( + (a) => a.length > 3 && (a.includes(anchor.slice(0, 6)) || anchor.includes(a.slice(0, 6))) + ); + errors.push( + `${file.slice(DOCS.length + 1)}:${line} → ${target}#${anchor} — нет такого заголовка` + + (near.length + ? `\n ближайшие: ${near + .slice(0, 3) + .map((a) => '#' + a) + .join(', ')}` + : '') + ); + } +} + +// `[Текст](METHOD /path)` shorthand must name an endpoint that exists — +// otherwise the renderer emits a dead badge and the generated markdown a bare +// literal. One such link survived for a year pointing at a path the API never +// had. +const specPath = resolve(DOCS, '../../packages/spec/openapi.yaml'); +if (existsSync(specPath)) { + const spec = readFileSync(specPath, 'utf-8'); + const known = new Set(); + let currentPath = null; + for (const line of spec.split('\n')) { + const p = line.match(/^ {2}(\/\S*):\s*$/); + if (p) currentPath = p[1]; + const m = line.match(/^ {4}(get|post|put|patch|delete):\s*$/); + if (m && currentPath) known.add(`${m[1].toUpperCase()} ${currentPath}`); + } + for (const file of files) { + const text = readFileSync(file, 'utf-8'); + for (const m of text.matchAll(/\]\((GET|POST|PUT|PATCH|DELETE)\s+(\/[^)\s]+)\)/g)) { + if (m[2].startsWith('/guides/')) continue; + if (known.has(`${m[1]} ${m[2]}`)) continue; + const line = text.slice(0, m.index).split('\n').length; + errors.push( + `${file.slice(DOCS.length + 1)}:${line} → ${m[1]} ${m[2]} — такого эндпоинта нет в спеке` + ); + } + } +} + +if (errors.length > 0) { + console.error(`\n✗ ${errors.length} битых ссылок:\n`); + for (const e of errors) console.error(` • ${e}\n`); + console.error( + 'Якоря строятся из заголовков через toSlug (lib/utils/transliterate.ts).\n' + + 'Кликабельность не проверяется в рантайме — битая ссылка просто ничего не делает.\n' + ); + process.exit(1); +} + +console.log(`✓ все внутренние якоря разрешаются (${anchors.size} страниц)`); diff --git a/apps/docs/scripts/check-examples.mjs b/apps/docs/scripts/check-examples.mjs new file mode 100644 index 000000000..c3e1a9c56 --- /dev/null +++ b/apps/docs/scripts/check-examples.mjs @@ -0,0 +1,98 @@ +#!/usr/bin/env node +/** + * Build gate: every example hand-authored in the spec must actually reach the + * generated docs. + * + * An operation-level `example` on a media type is the request/response the API + * really produces for THAT operation — something a schema-derived example + * cannot know. `POST /threads` returns `message_id: null` because a standalone + * thread has no message, while the `Thread` schema's own property example is a + * real id. + * + * Both docs example generators used to skip straight to the schema, so all nine + * authored examples were silently discarded and the pages showed values the API + * never returns. Nothing caught it: the output was still valid JSON, still + * matched the schema, and the committed artefacts were "in sync" with the + * generator that produced them. This check compares against the SPEC instead. + */ + +import { readFileSync, readdirSync, statSync } from 'node:fs'; +import { join, resolve } from 'node:path'; +import yaml from 'js-yaml'; + +const ROOT = resolve(import.meta.dirname, '../../..'); +const SPEC = join(ROOT, 'packages/spec/openapi.yaml'); +const API_DOCS = join(ROOT, 'apps/docs/public/api'); + +/** Every .md file under public/api, concatenated with its path. */ +function loadDocs(dir) { + const out = []; + for (const entry of readdirSync(dir)) { + const full = join(dir, entry); + if (statSync(full).isDirectory()) out.push(...loadDocs(full)); + else if (entry.endsWith('.md')) out.push({ path: full, text: readFileSync(full, 'utf-8') }); + } + return out; +} + +const spec = yaml.load(readFileSync(SPEC, 'utf-8')); +const docs = loadDocs(API_DOCS); +const METHODS = ['get', 'post', 'put', 'patch', 'delete']; + +/** Authored examples: [{ where, example }] */ +const authored = []; +for (const [path, item] of Object.entries(spec.paths ?? {})) { + for (const method of METHODS) { + const op = item[method]; + if (!op) continue; + const label = `${method.toUpperCase()} ${path}`; + + const reqContent = op.requestBody?.content ?? {}; + for (const [media, obj] of Object.entries(reqContent)) { + if (obj?.example !== undefined) { + authored.push({ where: `${label} request (${media})`, example: obj.example }); + } + } + for (const [code, resp] of Object.entries(op.responses ?? {})) { + for (const [media, obj] of Object.entries(resp?.content ?? {})) { + if (obj?.example !== undefined) { + authored.push({ where: `${label} response ${code} (${media})`, example: obj.example }); + } + } + } + } +} + +const errors = []; +for (const { where, example } of authored) { + // The generators emit examples as JSON.stringify(value, null, 2). + const rendered = JSON.stringify(example, null, 2); + if (!docs.some((d) => d.text.includes(rendered))) { + errors.push( + `${where}: the spec declares an example, but it appears in no page under public/api.\n` + + ` Expected this block verbatim:\n${rendered + .split('\n') + .slice(0, 6) + .map((l) => ` ${l}`) + .join('\n')}${rendered.split('\n').length > 6 ? '\n …' : ''}` + ); + } +} + +if (authored.length === 0) { + console.error('[check-examples] no authored examples found in the spec — is the parse right?'); + process.exit(1); +} + +if (errors.length > 0) { + console.error(`\n✗ ${errors.length} of ${authored.length} authored example(s) missing:\n`); + for (const e of errors) console.error(` • ${e}\n`); + console.error( + 'A hand-written example in the spec beats a schema-derived one — it is the\n' + + 'response the API actually returns. Check that the docs example generators\n' + + 'still prefer the media-type `example` over generating from the schema.\n' + ); + process.exit(1); +} + +console.log(`✓ all ${authored.length} spec-authored examples reach the docs`); diff --git a/apps/docs/scripts/generate-llms.ts b/apps/docs/scripts/generate-llms.ts index 78337738b..2df153fff 100644 --- a/apps/docs/scripts/generate-llms.ts +++ b/apps/docs/scripts/generate-llms.ts @@ -203,7 +203,9 @@ function generateLlmsTxt(api: Awaited>, sizes: B content += '## Руководства\n'; for (const guide of guidePages) { - const mdPath = guide.path === '/' ? '/.md' : `${guide.path}.md`; + // Homepage twin is /index.md. `/.md` only resolved thanks to a rewrite in + // next.config.ts — point at the real file instead of leaning on it. + const mdPath = guide.path === '/' ? '/index.md' : `${guide.path}.md`; const displayTitle = guide.sectionTitle ? `${guide.sectionTitle}, ${guide.title}` : guide.title; content += `- [${displayTitle}](${SITE_URL}${mdPath}): ${guide.description}\n`; } @@ -2172,17 +2174,49 @@ const REPO_ROOT = path.join(process.cwd(), '..', '..'); const UTF8_BOM = '\uFEFF'; +/** Endpoints used to resolve `METHOD /path` link shorthand; set once in main(). */ +let endpointsForLinks: { method: string; path: string; tags: string[] }[] = []; + +/** + * `[Текст](POST /messages)` is this repo's authoring shorthand for an endpoint + * link. The React renderer resolves it into a badge, but the generated .md and + * .txt artifacts never did — and per CommonMark a destination containing a + * space is not a link at all, so every one of them rendered as literal, + * non-clickable text for the agents these files exist to serve. + * + * Resolve at the single write chokepoint so every artifact is covered. + */ +function resolveMethodLinksForText(content: string): string { + return content.replace( + /\[([^\]]+)\]\((GET|POST|PUT|DELETE|PATCH)\s+(\/[^)\s]+)\)/g, + (match, label: string, method: string, apiPath: string) => { + const text = label.trim(); + // Guide paths are already real URLs behind the shorthand. + if (apiPath.startsWith('/guides/')) return `[${text}](${apiPath})`; + const endpoint = endpointsForLinks.find( + (e) => e.method.toUpperCase() === method.toUpperCase() && e.path === apiPath + ); + if (!endpoint) return `${text} (${method} ${apiPath})`; + return `[${text}](${generateUrlFromOperation(endpoint as never)})`; + } + ); +} + +const RESOLVE_LINKS_IN = /\.(md|txt)$/; + function writeFile(filePath: string, content: string) { const fullPath = path.join(process.cwd(), filePath); fs.mkdirSync(path.dirname(fullPath), { recursive: true }); - const data = filePath.endsWith('.txt') ? UTF8_BOM + content : content; + const resolved = RESOLVE_LINKS_IN.test(filePath) ? resolveMethodLinksForText(content) : content; + const data = filePath.endsWith('.txt') ? UTF8_BOM + resolved : resolved; fs.writeFileSync(fullPath, data, 'utf-8'); } function writeFileFromRoot(filePath: string, content: string) { const fullPath = path.join(REPO_ROOT, filePath); fs.mkdirSync(path.dirname(fullPath), { recursive: true }); - fs.writeFileSync(fullPath, content, 'utf-8'); + const resolved = RESOLVE_LINKS_IN.test(filePath) ? resolveMethodLinksForText(content) : content; + fs.writeFileSync(fullPath, resolved, 'utf-8'); } /** Agent preamble at the top of every page `.md` (one blockquote, up to three @@ -2279,6 +2313,7 @@ function generateGuidesSectionLlmsTxt(): string { async function main() { clearCache(); const api = await parseOpenAPI(); + endpointsForLinks = api.endpoints; // Build the bulk variants first so llms.txt can quote their actual // approximate token counts in the preamble (helps agents decide @@ -2459,7 +2494,7 @@ function assertGeneratedMarkdownIntegrity(llmsTxt: string) { } for (const m of llmsTxt.matchAll(/\]\((https:\/\/dev\.pachca\.com(\/[^)]+\.md))\)/g)) { - const filePath = path.join(publicDir, m[2] === '/.md' ? 'index.md' : m[2]); + const filePath = path.join(publicDir, m[2]); if (!fs.existsSync(filePath)) errors.push(`stale llms.txt link (no file): ${m[1]}`); } diff --git a/apps/docs/scripts/skills/generate.ts b/apps/docs/scripts/skills/generate.ts index 0036d22b1..ebd3374d1 100644 --- a/apps/docs/scripts/skills/generate.ts +++ b/apps/docs/scripts/skills/generate.ts @@ -63,6 +63,9 @@ function buildFullDescription(config: SkillConfig): string { desc += ` Use when: ${config.triggers.join(', ')}.`; } if (config.negativeTriggers.length > 0) { + // `parts` adds "→ neighbouring-skill" routing hints on top of the plain + // negative triggers. It was built and then dropped, so eight skills told + // agents what they are NOT for without saying where to go instead. const parts: string[] = [...config.negativeTriggers]; if (config.nearestAlternatives) { for (const alt of config.nearestAlternatives) { @@ -73,7 +76,7 @@ function buildFullDescription(config: SkillConfig): string { } } } - desc += ` NOT for: ${config.negativeTriggers.join(', ')}.`; + desc += ` NOT for: ${parts.join(', ')}.`; } return desc; } @@ -234,17 +237,22 @@ function groupEndpointsBySkill(endpoints: Endpoint[]) { const tag = ep.tags[0] || 'Common'; let assigned = false; - if (tag === 'Common') { - for (const [pathPrefix, skillName] of Object.entries(COMMON_ENDPOINT_MAP)) { - if (ep.path === pathPrefix || ep.path.startsWith(pathPrefix + '/')) { - result.get(skillName)?.push(ep); - assigned = true; - break; - } - } - if (!assigned) { - result.get('pachca-profile')?.push(ep); + // Route by PATH first, regardless of tag. This map used to be consulted + // only for a `Common` tag, which no endpoint has — so /custom_properties, + // /uploads and /direct_url fell through to placeholder skills that no + // index, router or agent-card references, and the three endpoints became + // undiscoverable. + for (const [pathPrefix, skillName] of Object.entries(COMMON_ENDPOINT_MAP)) { + if (ep.path === pathPrefix || ep.path.startsWith(pathPrefix + '/')) { + result.get(skillName)?.push(ep); + assigned = true; + break; } + } + if (assigned) continue; + + if (tag === 'Common') { + result.get('pachca-profile')?.push(ep); continue; } diff --git a/bun.lock b/bun.lock index 50f83fb23..1e5298e5b 100644 --- a/bun.lock +++ b/bun.lock @@ -180,6 +180,7 @@ "version": "0.0.0", "devDependencies": { "@pachca/spec": "workspace:*", + "@types/node": "^22.14.0", "typescript": "^5.0.0", }, }, diff --git a/integrations/n8n/CHANGELOG.md b/integrations/n8n/CHANGELOG.md index 35e88a446..0e407cd02 100644 --- a/integrations/n8n/CHANGELOG.md +++ b/integrations/n8n/CHANGELOG.md @@ -2,6 +2,20 @@ # Changelog +## 2.0.16 (2026-07-27) + +### Fixes + +- Requests: `POST`/`PATCH` are no longer auto-retried on 5xx — a committed write could be sent up to four times, creating duplicate messages. 429 still retries for every method +- Bot: the resource no longer defaults to `Recreate own bot token`, an irreversible rotation that ran on a bare Execute. It now defaults to `Get Many` +- User: `Update Avatar`, `Delete Avatar`, `Get Status`, `Update Status` and `Delete Status` show the user picker instead of a bare numeric field +- Member: `Add Group Tags` / `Remove Group Tags` are labelled "to chat" — the tag is attached to the chat, not to a member +- Chat picker: page size uses the v2 `limit` parameter and the cursor is URL-encoded, so pagination no longer breaks on base64 cursors containing `+` or `/` +- Chat/user search: results past the first page are reachable, and the on-prem base URL is normalised (no more `//search/...` with a trailing slash) +- Pagination: a `has_next: true` page with a missing or repeated cursor stops instead of truncating silently or refetching +- Trigger: a webhook with a missing or zero `webhook_timestamp` is rejected when a signing secret is configured, instead of skipping the replay window +- Form: the `Callback ID` placeholder read `timeoff_reguest_form` — a typo that did not match the value echoed back in the view-submit webhook + ## 2.0.15 (2026-07-24) ### Improvements diff --git a/integrations/n8n/credentials/PachcaApi.credentials.ts b/integrations/n8n/credentials/PachcaApi.credentials.ts index ae2772952..c075a447a 100644 --- a/integrations/n8n/credentials/PachcaApi.credentials.ts +++ b/integrations/n8n/credentials/PachcaApi.credentials.ts @@ -55,6 +55,9 @@ export class PachcaApi implements ICredentialType { }, }; + // /oauth/token/info is deliberate and works for bot tokens: it declares no + // required scope, whereas GET /profile requires profile:read and would reject + // a narrowly-scoped token. Checked 2026-07-25 — do not "fix" to /profile. test: ICredentialTestRequest = { request: { baseURL: '={{$credentials.baseUrl}}', diff --git a/integrations/n8n/nodes/Pachca/GenericFunctions.ts b/integrations/n8n/nodes/Pachca/GenericFunctions.ts index 2c4224e73..e2c1388fc 100644 --- a/integrations/n8n/nodes/Pachca/GenericFunctions.ts +++ b/integrations/n8n/nodes/Pachca/GenericFunctions.ts @@ -309,8 +309,14 @@ export async function makeApiRequest( } } - // Auto-retry on 429 (rate limit) and 5xx (server errors) - if ((response.statusCode === 429 || response.statusCode >= 500) && attempt < MAX_RETRIES) { + // Auto-retry on 429 (rate limit) and, for idempotent methods only, 5xx. + // A 5xx from a proxy or a draining load balancer says nothing about whether + // the backend already committed the write, so replaying POST /messages + // there posts the message up to four times. 429 is safe for any method: + // the request was rejected before it was processed. + const idempotent = method === 'GET' || method === 'HEAD' || method === 'PUT' || method === 'DELETE'; + const retryable = response.statusCode === 429 || (response.statusCode >= 500 && idempotent); + if (retryable && attempt < MAX_RETRIES) { const respHeaders = response.headers as Record | undefined; const retryAfter = parseInt(respHeaders?.['retry-after'] ?? '', 10); const delaySec = retryAfter || Math.pow(2, attempt) * (0.5 + Math.random()); @@ -430,9 +436,13 @@ export async function makeApiRequestAllPages( // Termination: списочные методы — has_next === false; legacy meta без has_next (например, /users?query=) — пустой data const hasNext = paginate?.has_next as boolean | undefined; if (typeof hasNext === 'boolean') { + if (!hasNext) break; + // Same stuck-cursor guard the legacy branch has: `has_next: true` with a + // missing or unchanged next_page would otherwise silently truncate (cursor + // undefined ends the loop) or re-fetch the same page up to MAX_PAGES times. + if (!nextCursor || nextCursor === cursor) break; cursor = nextCursor; pageCount++; - if (!hasNext) break; } else { if (items.length === 0) break; // Guard against infinite loops: server returned the same cursor we just sent @@ -839,9 +849,15 @@ export async function searchChats( paginationToken?: unknown, ): Promise { const credentials = await this.getCredentials('pachcaApi'); + const baseUrl = sanitizeBaseUrl(credentials.baseUrl as string); if (filter) { - const url = `${credentials.baseUrl}/search/chats?query=${encodeURIComponent(filter)}`; + // /search/chats is paginated too — pass the cursor through and hand the + // next one back, otherwise matches past the first page are unreachable. + const cursorParam = paginationToken + ? `&cursor=${encodeURIComponent(String(paginationToken))}` + : ''; + const url = `${baseUrl}/search/chats?query=${encodeURIComponent(filter)}&limit=100${cursorParam}`; const response = await this.helpers.httpRequestWithAuthentication.call(this, 'pachcaApi', { method: 'GET', url, @@ -852,13 +868,16 @@ export async function searchChats( name: c.name, value: c.id, })), + paginationToken: response.meta?.paginate?.next_page as string | undefined, }; } - // No filter — paginated listing + // No filter — paginated listing. `limit` is the v2 param (`per` is v1 and is + // ignored); the cursor is an opaque token that may contain +, / or = and must + // be encoded before it goes into the query string. const cursor = paginationToken as string | undefined; - const qs = cursor ? `per=50&cursor=${cursor}` : 'per=50'; - const url = `${credentials.baseUrl}/chats?${qs}`; + const qs = cursor ? `limit=50&cursor=${encodeURIComponent(cursor)}` : 'limit=50'; + const url = `${baseUrl}/chats?${qs}`; const response = await this.helpers.httpRequestWithAuthentication.call(this, 'pachcaApi', { method: 'GET', url, @@ -878,10 +897,19 @@ export async function searchChats( export async function searchUsers( this: ILoadOptionsFunctions, filter?: string, + paginationToken?: unknown, ): Promise { const credentials = await this.getCredentials('pachcaApi'); - if (!filter) return { results: [] }; - const url = `${credentials.baseUrl}/search/users?query=${encodeURIComponent(filter)}`; + const baseUrl = sanitizeBaseUrl(credentials.baseUrl as string); + const cursorParam = paginationToken + ? `&cursor=${encodeURIComponent(String(paginationToken))}` + : ''; + // No filter — paginated listing, same as searchChats. Returning an empty array + // here made the picker look broken: opening it showed nothing until the user + // guessed that typing was required. + const url = filter + ? `${baseUrl}/search/users?query=${encodeURIComponent(filter)}&limit=200${cursorParam}` + : `${baseUrl}/users?limit=50${cursorParam}`; const response = await this.helpers.httpRequestWithAuthentication.call(this, 'pachcaApi', { method: 'GET', url, @@ -892,6 +920,7 @@ export async function searchUsers( name: formatUserName(u), value: u.id, })), + paginationToken: response.meta?.paginate?.next_page as string | undefined, }; } @@ -911,7 +940,7 @@ export async function searchEntities( } if (entityType === 'user') { - return searchUsers.call(this, filter); + return searchUsers.call(this, filter, paginationToken); } if (entityType === 'thread') { return { results: [] }; @@ -924,11 +953,12 @@ export async function getCustomProperties( this: ILoadOptionsFunctions, ): Promise { const credentials = await this.getCredentials('pachcaApi'); + const baseUrl = sanitizeBaseUrl(credentials.baseUrl as string); const resource = this.getNodeParameter('resource') as string; const entityType = resource === 'task' ? 'Task' : 'User'; const response = await this.helpers.httpRequestWithAuthentication.call(this, 'pachcaApi', { method: 'GET', - url: `${credentials.baseUrl}/custom_properties?entity_type=${entityType}`, + url: `${baseUrl}/custom_properties?entity_type=${entityType}`, }); const items = response.data ?? []; return items.map((p: { id: number; name: string }) => ({ diff --git a/integrations/n8n/nodes/Pachca/PachcaTrigger.node.ts b/integrations/n8n/nodes/Pachca/PachcaTrigger.node.ts index 2c234e4be..bba2c8398 100644 --- a/integrations/n8n/nodes/Pachca/PachcaTrigger.node.ts +++ b/integrations/n8n/nodes/Pachca/PachcaTrigger.node.ts @@ -360,9 +360,17 @@ export class PachcaTrigger implements INodeType { } } - // Replay protection — reject events older than 5 minutes - const webhookTs = body.webhook_timestamp as number | undefined; - if (webhookTs) { + // Replay protection — reject events older than 5 minutes. + // A missing/zero timestamp used to skip the window entirely. When a signing + // secret is configured the field is required (the spec always sends it), so + // treat its absence as a rejection rather than a free pass. Without a secret + // there is no authentication anyway, so an absent field stays tolerated. + const webhookTs = Number(body.webhook_timestamp); + const hasWebhookTs = Number.isFinite(webhookTs) && webhookTs > 0; + if (signingSecret && !hasWebhookTs) { + return { webhookResponse: 'Rejected' }; + } + if (hasWebhookTs) { const ageMs = Date.now() - webhookTs * 1000; if (ageMs < -60_000 || ageMs > 5 * 60 * 1000) { return { webhookResponse: 'Rejected' }; diff --git a/integrations/n8n/nodes/Pachca/SharedRouter.ts b/integrations/n8n/nodes/Pachca/SharedRouter.ts index 8d0a8c960..3bf703771 100644 --- a/integrations/n8n/nodes/Pachca/SharedRouter.ts +++ b/integrations/n8n/nodes/Pachca/SharedRouter.ts @@ -728,23 +728,23 @@ const ROUTES: Record> = { updateAvatar: { method: 'PUT' as IHttpRequestMethods, path: '/users/{user_id}/avatar', - pathParams: [{ api: 'user_id', n8n: 'userId' }], + pathParams: [{ api: 'user_id', n8n: 'userId', locator: true }], special: 'avatarUpload', }, deleteAvatar: { method: 'DELETE' as IHttpRequestMethods, path: '/users/{user_id}/avatar', - pathParams: [{ api: 'user_id', n8n: 'userId' }], + pathParams: [{ api: 'user_id', n8n: 'userId', locator: true }], }, getStatus: { method: 'GET' as IHttpRequestMethods, path: '/users/{user_id}/status', - pathParams: [{ api: 'user_id', n8n: 'userId' }], + pathParams: [{ api: 'user_id', n8n: 'userId', locator: true }], }, updateStatus: { method: 'PUT' as IHttpRequestMethods, path: '/users/{user_id}/status', - pathParams: [{ api: 'user_id', n8n: 'userId' }], + pathParams: [{ api: 'user_id', n8n: 'userId', locator: true }], wrapperKey: 'status', bodyMap: [ { api: 'emoji', n8n: 'emoji' }, @@ -759,7 +759,7 @@ const ROUTES: Record> = { deleteStatus: { method: 'DELETE' as IHttpRequestMethods, path: '/users/{user_id}/status', - pathParams: [{ api: 'user_id', n8n: 'userId' }], + pathParams: [{ api: 'user_id', n8n: 'userId', locator: true }], }, }, form: { @@ -867,7 +867,8 @@ async function executeRoute( return [{ json: inputData }]; } if (route.special === 'exportDownload') { - const exportId = this.getNodeParameter('id', i) as number; + // 'id' is a resourceLocator: read raw it stringifies to "[object Object]". + const exportId = resolveResourceLocator(this, 'id', i); const credentials = await this.getCredentials('pachcaApi'); const base = sanitizeBaseUrl(credentials.baseUrl as string); const resp = await this.helpers.httpRequestWithAuthentication.call(this, 'pachcaApi', { @@ -889,7 +890,11 @@ async function executeRoute( if (route.special === 'avatarUpload') { let avatarUrl = route.path; for (const pp of route.pathParams ?? []) { - const value = this.getNodeParameter(pp.n8n, i) as number; + // Must honour pp.locator like the main URL builder below: a + // resourceLocator parameter read raw stringifies to "[object Object]". + const value = pp.locator + ? resolveResourceLocator(this, pp.n8n, i, pp.v1Fallback) + : (this.getNodeParameter(pp.n8n, i) as number); avatarUrl = avatarUrl.replace(`{${pp.api}}`, String(value)); } const result = await uploadAvatar(this, i, avatarUrl); diff --git a/integrations/n8n/nodes/Pachca/V2/BotDescription.ts b/integrations/n8n/nodes/Pachca/V2/BotDescription.ts index e64ff6d73..77ef7f83e 100644 --- a/integrations/n8n/nodes/Pachca/V2/BotDescription.ts +++ b/integrations/n8n/nodes/Pachca/V2/BotDescription.ts @@ -59,7 +59,7 @@ export const botOperations: INodeProperties[] = [ action: 'Update bot webhook', }, ], - default: 'recreateTokenSelf', + default: 'getAll', }, ]; @@ -228,7 +228,7 @@ export const botFields: INodeProperties[] = [ name: 'scopes', type: 'string', default: "", - description: 'Bot token scopes (permissions). If omitted, the bot receives the default set.', + description: 'Bot token scopes (permissions). If omitted, the bot receives the default set. Not every scope is available to a bot: some are allowed only for user roles, and attempting to assign such a scope returns `400`. The service values `bot` and `all` cannot be assigned.', placeholder: 'messages:create', }, { @@ -418,7 +418,7 @@ export const botFields: INodeProperties[] = [ name: 'scopes', type: 'string', default: "", - description: 'Bot token scopes (permissions). If omitted, the bot receives the default set.', + description: 'Bot token scopes (permissions). If omitted, the bot receives the default set. Not every scope is available to a bot: some are allowed only for user roles, and attempting to assign such a scope returns `400`. The service values `bot` and `all` cannot be assigned.', placeholder: 'messages:create', }, { diff --git a/integrations/n8n/nodes/Pachca/V2/FormDescription.ts b/integrations/n8n/nodes/Pachca/V2/FormDescription.ts index e727b8190..f6aa040d0 100644 --- a/integrations/n8n/nodes/Pachca/V2/FormDescription.ts +++ b/integrations/n8n/nodes/Pachca/V2/FormDescription.ts @@ -64,7 +64,7 @@ export const formFields: INodeProperties[] = [ type: 'string', default: "", description: 'Optional identifier for recognizing this view, which will be sent to your application when the user submits the form. Use this field, for example, to determine which form the user was supposed to fill out.', - placeholder: 'timeoff_reguest_form', + placeholder: 'timeoff_request_form', }, { displayName: 'Close Text', diff --git a/integrations/n8n/nodes/Pachca/V2/MemberDescription.ts b/integrations/n8n/nodes/Pachca/V2/MemberDescription.ts index f3a7c14ad..4b1f9993a 100644 --- a/integrations/n8n/nodes/Pachca/V2/MemberDescription.ts +++ b/integrations/n8n/nodes/Pachca/V2/MemberDescription.ts @@ -11,7 +11,7 @@ export const memberOperations: INodeProperties[] = [ { name: 'Add Group Tags', value: 'addGroupTags', - action: 'Add group tags to chat member', + action: 'Add group tags to chat', }, { name: 'Create', @@ -36,7 +36,7 @@ export const memberOperations: INodeProperties[] = [ { name: 'Remove Group Tags', value: 'removeGroupTags', - action: 'Remove group tags from chat member', + action: 'Remove group tags from chat', }, { name: 'Update', diff --git a/integrations/n8n/nodes/Pachca/V2/SecurityDescription.ts b/integrations/n8n/nodes/Pachca/V2/SecurityDescription.ts index d3ea48b7f..5aa6b78b1 100644 --- a/integrations/n8n/nodes/Pachca/V2/SecurityDescription.ts +++ b/integrations/n8n/nodes/Pachca/V2/SecurityDescription.ts @@ -79,8 +79,8 @@ export const securityFields: INodeProperties[] = [ name: 'endTime', type: 'dateTime', default: "", - description: 'End timestamp (exclusive)', - placeholder: '2025-05-02T09:11:00Z', + description: 'End timestamp (inclusive)', + placeholder: '2025-05-02T09:11:00.000Z', }, { displayName: 'Entity ID', @@ -152,7 +152,7 @@ export const securityFields: INodeProperties[] = [ type: 'dateTime', default: "", description: 'Start timestamp (inclusive)', - placeholder: '2025-05-01T09:11:00Z', + placeholder: '2025-05-01T09:11:00.000Z', }, ], }, diff --git a/integrations/n8n/nodes/Pachca/V2/UserDescription.ts b/integrations/n8n/nodes/Pachca/V2/UserDescription.ts index 6b0ba21cb..3b1a49381 100644 --- a/integrations/n8n/nodes/Pachca/V2/UserDescription.ts +++ b/integrations/n8n/nodes/Pachca/V2/UserDescription.ts @@ -471,9 +471,31 @@ export const userFields: INodeProperties[] = [ { displayName: 'User ID', name: 'userId', - type: 'number', + type: 'resourceLocator', + default: { mode: 'list', value: '' }, required: true, - default: 0, + modes: [ + { + displayName: 'From List', + name: 'list', + type: 'list', + typeOptions: { searchListMethod: 'searchUsers', searchable: true }, + }, + { + displayName: 'By ID', + name: 'id', + type: 'string', + placeholder: 'e.g. 12', + }, + { + displayName: 'By URL', + name: 'url', + type: 'string', + placeholder: 'https://app.pachca.com/users/12345', + extractValue: { type: 'regex', regex: 'https?://[^/]+/users/(\\d+)' }, + validation: [{ type: 'regex', properties: { regex: 'https?://[^/]+/users/(\\d+)', errorMessage: 'Not a valid Pachca user URL' } }], + }, + ], displayOptions: { show: { resource: ['user'], operation: ['updateAvatar'] } }, }, { @@ -495,9 +517,31 @@ export const userFields: INodeProperties[] = [ { displayName: 'User ID', name: 'userId', - type: 'number', + type: 'resourceLocator', + default: { mode: 'list', value: '' }, required: true, - default: 0, + modes: [ + { + displayName: 'From List', + name: 'list', + type: 'list', + typeOptions: { searchListMethod: 'searchUsers', searchable: true }, + }, + { + displayName: 'By ID', + name: 'id', + type: 'string', + placeholder: 'e.g. 12', + }, + { + displayName: 'By URL', + name: 'url', + type: 'string', + placeholder: 'https://app.pachca.com/users/12345', + extractValue: { type: 'regex', regex: 'https?://[^/]+/users/(\\d+)' }, + validation: [{ type: 'regex', properties: { regex: 'https?://[^/]+/users/(\\d+)', errorMessage: 'Not a valid Pachca user URL' } }], + }, + ], displayOptions: { show: { resource: ['user'], operation: ['deleteAvatar'] } }, }, { @@ -510,9 +554,31 @@ export const userFields: INodeProperties[] = [ { displayName: 'User ID', name: 'userId', - type: 'number', + type: 'resourceLocator', + default: { mode: 'list', value: '' }, required: true, - default: 0, + modes: [ + { + displayName: 'From List', + name: 'list', + type: 'list', + typeOptions: { searchListMethod: 'searchUsers', searchable: true }, + }, + { + displayName: 'By ID', + name: 'id', + type: 'string', + placeholder: 'e.g. 12', + }, + { + displayName: 'By URL', + name: 'url', + type: 'string', + placeholder: 'https://app.pachca.com/users/12345', + extractValue: { type: 'regex', regex: 'https?://[^/]+/users/(\\d+)' }, + validation: [{ type: 'regex', properties: { regex: 'https?://[^/]+/users/(\\d+)', errorMessage: 'Not a valid Pachca user URL' } }], + }, + ], displayOptions: { show: { resource: ['user'], operation: ['getStatus'] } }, }, { @@ -533,9 +599,31 @@ export const userFields: INodeProperties[] = [ { displayName: 'User ID', name: 'userId', - type: 'number', + type: 'resourceLocator', + default: { mode: 'list', value: '' }, required: true, - default: 0, + modes: [ + { + displayName: 'From List', + name: 'list', + type: 'list', + typeOptions: { searchListMethod: 'searchUsers', searchable: true }, + }, + { + displayName: 'By ID', + name: 'id', + type: 'string', + placeholder: 'e.g. 12', + }, + { + displayName: 'By URL', + name: 'url', + type: 'string', + placeholder: 'https://app.pachca.com/users/12345', + extractValue: { type: 'regex', regex: 'https?://[^/]+/users/(\\d+)' }, + validation: [{ type: 'regex', properties: { regex: 'https?://[^/]+/users/(\\d+)', errorMessage: 'Not a valid Pachca user URL' } }], + }, + ], displayOptions: { show: { resource: ['user'], operation: ['updateStatus'] } }, }, { @@ -601,9 +689,31 @@ export const userFields: INodeProperties[] = [ { displayName: 'User ID', name: 'userId', - type: 'number', + type: 'resourceLocator', + default: { mode: 'list', value: '' }, required: true, - default: 0, + modes: [ + { + displayName: 'From List', + name: 'list', + type: 'list', + typeOptions: { searchListMethod: 'searchUsers', searchable: true }, + }, + { + displayName: 'By ID', + name: 'id', + type: 'string', + placeholder: 'e.g. 12', + }, + { + displayName: 'By URL', + name: 'url', + type: 'string', + placeholder: 'https://app.pachca.com/users/12345', + extractValue: { type: 'regex', regex: 'https?://[^/]+/users/(\\d+)' }, + validation: [{ type: 'regex', properties: { regex: 'https?://[^/]+/users/(\\d+)', errorMessage: 'Not a valid Pachca user URL' } }], + }, + ], displayOptions: { show: { resource: ['user'], operation: ['deleteStatus'] } }, }, { diff --git a/integrations/n8n/scripts/generate-n8n.ts b/integrations/n8n/scripts/generate-n8n.ts index e98f256df..1ae7f1a25 100644 --- a/integrations/n8n/scripts/generate-n8n.ts +++ b/integrations/n8n/scripts/generate-n8n.ts @@ -124,6 +124,19 @@ const V1_COMPAT_SUBCOLLECTIONS: Record = { options: 'option', }; +/** + * Name of the inner collection of a fixedCollection field. + * + * The UI description and the router MUST agree on this string, otherwise the + * router looks up a key the UI never wrote and the field's value is sent as the + * raw wrapper object (a 422). They used to compute it independently — + * `${x}Values` in the description vs `singularize(x)` in the router — so any + * new array-of-objects field missing from V1_COMPAT_SUBCOLLECTIONS diverged. + */ +function subCollectionName(n8nName: string): string { + return V1_COMPAT_SUBCOLLECTIONS[n8nName] ?? `${n8nName}Values`; +} + /** v1 alias operations: optional query params (not from OpenAPI) */ const V1_ALIAS_QUERY_PARAMS: Record> = { chat: { @@ -173,6 +186,10 @@ const PREFERRED_DEFAULT_OPS: Record = { groupTag: 'getAll', user: 'getAll', member: 'getAll', + // Without this, `bot` falls back to operations[0] — which is + // POST /bot/recreate_token, an irreversible rotation of the caller's own + // token. A landing operation must never be destructive. + bot: 'getAll', }; /** v1 ID parameter fallback — shared ops where v1 used prefixed names (chatId, messageId, userId) */ @@ -388,7 +405,10 @@ const BODY_FIELD_SEARCH: Record> = { /** Path parameters that use resourceLocator with searchable dropdown */ const PATH_PARAM_SEARCH: Record> = { chat: { id: 'searchChats' }, - user: { id: 'searchUsers' }, + // `/users/{user_id}/status|avatar` name the param user_id, not id — without + // this key those five operations rendered a bare number field instead of the + // user picker. + user: { id: 'searchUsers', user_id: 'searchUsers' }, member: { id: 'searchChats', user_id: 'searchUsers' }, // member's `id` is chat_id, `user_id` is user }; @@ -457,8 +477,17 @@ function tagToResource(tag: string): string { 'Link Previews': 'linkPreview', 'Search': 'search', 'Security': 'security', + 'Custom Properties': 'customProperty', + 'Files': 'file', }; - return MAP[tag] || tag.toLowerCase().replace(/s$/, ''); + if (MAP[tag]) return MAP[tag]; + // Fallback for an unmapped tag. Must produce a valid camelCase identifier: + // a naive lowercase+strip-s turned "Custom Properties" into "custom propertie". + const words = tag.toLowerCase().split(/\s+/).filter(Boolean); + const singular = words + .map((w, i) => (i === words.length - 1 ? w.replace(/ies$/, 'y').replace(/s$/, '') : w)) + .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1))); + return singular.join(''); } /** Resource value → display name (Title Case, singular) */ @@ -621,6 +650,11 @@ function actionLabel(op: string, resourceName: string, resource?: string): strin unfurl: 'Unfurl link preview', addTags: 'Add tags to chat', removeTag: 'Remove tag from chat', + // `/chats/{id}/group_tags` is tagged Members in the spec, so the generic + // sub-resource labeller says "to chat member" — but the tag goes on the + // chat, not on a member. + addGroupTags: 'Add group tags to chat', + removeGroupTags: 'Remove group tags from chat', recreateToken: 'Recreate bot token', recreateTokenSelf: 'Recreate own bot token', createStandalone: 'Create a standalone thread', @@ -666,10 +700,12 @@ function getParamName(resource: string, op: string, fieldName: string): string { const v1Resource = V1_COMPAT_RESOURCES[resource] ?? resource; const opMap = V1_COMPAT_PARAMS[v1Resource]; if (opMap) { - const wildcard = opMap['*']?.[snakeToCamel(fieldName)]; - if (wildcard) return wildcard; + // Op-specific entry first: checking `*` first made an op-level override + // unreachable, which is the opposite of what an override is for. const specific = opMap[op]?.[snakeToCamel(fieldName)]; if (specific) return specific; + const wildcard = opMap['*']?.[snakeToCamel(fieldName)]; + if (wildcard) return wildcard; } return snakeToCamel(fieldName); } @@ -1547,7 +1583,7 @@ function generateFieldProperty( } if (n8nType === 'fixedCollection' && field.items?.properties) { - const subName = V1_COMPAT_SUBCOLLECTIONS[paramName] ?? `${paramName}Values`; + const subName = subCollectionName(paramName); lines.push(`${tab}\ttypeOptions: { multipleValues: true },`); lines.push(`${tab}\toptions: [{`); lines.push(`${tab}\t\tname: ${quote(subName)},`); @@ -1976,6 +2012,9 @@ export class PachcaApi implements ICredentialType { \t\t}, \t}; +\t// /oauth/token/info is deliberate and works for bot tokens: it declares no +\t// required scope, whereas GET /profile requires profile:read and would reject +\t// a narrowly-scoped token. Checked 2026-07-25 — do not "fix" to /profile. \ttest: ICredentialTestRequest = { \t\trequest: { \t\t\tbaseURL: '={{$credentials.baseUrl}}', @@ -2614,9 +2653,17 @@ ${optionEntries} \t\t\t} \t\t} -\t\t// Replay protection — reject events older than 5 minutes -\t\tconst webhookTs = body.webhook_timestamp as number | undefined; -\t\tif (webhookTs) { +\t\t// Replay protection — reject events older than 5 minutes. +\t\t// A missing/zero timestamp used to skip the window entirely. When a signing +\t\t// secret is configured the field is required (the spec always sends it), so +\t\t// treat its absence as a rejection rather than a free pass. Without a secret +\t\t// there is no authentication anyway, so an absent field stays tolerated. +\t\tconst webhookTs = Number(body.webhook_timestamp); +\t\tconst hasWebhookTs = Number.isFinite(webhookTs) && webhookTs > 0; +\t\tif (signingSecret && !hasWebhookTs) { +\t\t\treturn { webhookResponse: 'Rejected' }; +\t\t} +\t\tif (hasWebhookTs) { \t\t\tconst ageMs = Date.now() - webhookTs * 1000; \t\t\tif (ageMs < -60_000 || ageMs > 5 * 60 * 1000) { \t\t\t\treturn { webhookResponse: 'Rejected' }; @@ -2678,7 +2725,7 @@ function buildFieldMapStr(resource: string, op: OperationInfo, f: BodyField): st // fixedCollection subKey if (f.type === 'array' && f.items?.properties) { - const subKey = V1_COMPAT_SUBCOLLECTIONS[n8nName] ?? singularize(n8nName); + const subKey = subCollectionName(n8nName); parts.push(`subKey: '${subKey}'`); } @@ -3103,7 +3150,8 @@ async function executeRoute( \t\treturn [{ json: inputData }]; \t} \tif (route.special === 'exportDownload') { -\t\tconst exportId = this.getNodeParameter('id', i) as number; +\t\t// 'id' is a resourceLocator: read raw it stringifies to "[object Object]". +\t\tconst exportId = resolveResourceLocator(this, 'id', i); \t\tconst credentials = await this.getCredentials('pachcaApi'); \t\tconst base = sanitizeBaseUrl(credentials.baseUrl as string); \t\tconst resp = await this.helpers.httpRequestWithAuthentication.call(this, 'pachcaApi', { @@ -3125,7 +3173,11 @@ async function executeRoute( \tif (route.special === 'avatarUpload') { \t\tlet avatarUrl = route.path; \t\tfor (const pp of route.pathParams ?? []) { -\t\t\tconst value = this.getNodeParameter(pp.n8n, i) as number; +\t\t\t// Must honour pp.locator like the main URL builder below: a +\t\t\t// resourceLocator parameter read raw stringifies to "[object Object]". +\t\t\tconst value = pp.locator +\t\t\t\t? resolveResourceLocator(this, pp.n8n, i, pp.v1Fallback) +\t\t\t\t: (this.getNodeParameter(pp.n8n, i) as number); \t\t\tavatarUrl = avatarUrl.replace(\`{\${pp.api}}\`, String(value)); \t\t} \t\tconst result = await uploadAvatar(this, i, avatarUrl); diff --git a/integrations/n8n/tests/error-paths.test.ts b/integrations/n8n/tests/error-paths.test.ts index 37330a988..5816dfd68 100644 --- a/integrations/n8n/tests/error-paths.test.ts +++ b/integrations/n8n/tests/error-paths.test.ts @@ -197,6 +197,42 @@ describe('makeApiRequest error paths', () => { } }); + it('should NOT retry a POST on 5xx (the write may already be committed)', async () => { + const ctx = createExecCtx({ + httpResponse: { + statusCode: 502, + body: {}, + headers: {}, + }, + }); + + try { + await makeApiRequest.call(ctx, 'POST', '/messages', { content: 'hi' }, undefined, 0); + expect.unreachable('Should have thrown'); + } catch (error) { + expect(error).toBeInstanceOf(NodeApiError); + // Exactly one attempt: retrying would post the message up to 4 times. + expect(ctx.helpers.httpRequestWithAuthentication).toHaveBeenCalledTimes(1); + } + }); + + it('should still retry a POST on 429 (request was rejected, not committed)', async () => { + const ctx = createExecCtx({ + httpResponse: { + statusCode: 429, + body: { error: 'Rate limited' }, + headers: { 'retry-after': '0' }, + }, + }); + + try { + await makeApiRequest.call(ctx, 'POST', '/messages', { content: 'hi' }, undefined, 0); + expect.unreachable('Should have thrown'); + } catch { + expect(ctx.helpers.httpRequestWithAuthentication).toHaveBeenCalledTimes(4); + } + }); + it('should not send Content-Type or body for GET requests', async () => { const ctx = createExecCtx({ httpResponse: { statusCode: 200, body: { data: [] }, headers: {} }, diff --git a/integrations/n8n/tests/load-options.test.ts b/integrations/n8n/tests/load-options.test.ts index 5405132f1..1af427c51 100644 --- a/integrations/n8n/tests/load-options.test.ts +++ b/integrations/n8n/tests/load-options.test.ts @@ -133,7 +133,21 @@ describe('searchChats', () => { expect(result.paginationToken).toBe('cursor-abc'); const httpMock = ctx.helpers.httpRequestWithAuthentication as ReturnType; - expect(httpMock.mock.calls[0][1].url).toContain('/chats?per=50'); + // `limit` is the v2 page-size param; `per` is v1 and is ignored by /chats. + expect(httpMock.mock.calls[0][1].url).toContain('/chats?limit=50'); + }); + + it('should URL-encode the cursor', async () => { + const ctx = createLoadCtx({ + httpResponses: [{ data: [], meta: { paginate: {} } }], + }); + + // Cursors are opaque base64 and may contain + and /, which are not safe + // to interpolate into a query string raw. + await searchChats.call(ctx, undefined, 'a+b/c='); + + const httpMock = ctx.helpers.httpRequestWithAuthentication as ReturnType; + expect(httpMock.mock.calls[0][1].url).toContain('cursor=a%2Bb%2Fc%3D'); }); it('should pass pagination cursor', async () => { @@ -180,16 +194,25 @@ describe('searchUsers', () => { ]); }); - it('should return empty results without filter', async () => { - const ctx = createLoadCtx(); + // Без фильтра список берётся из /users, как и у searchChats: пустой ответ + // выглядел в редакторе как сломанный выбор сотрудника. + it('should list users without filter', async () => { + const ctx = createLoadCtx({ + httpResponses: [{ data: [{ id: 10, first_name: 'Alice', last_name: 'Smith', nickname: 'alice' }] }], + }); const result = await searchUsers.call(ctx, undefined); - expect(result.results).toEqual([]); + expect(result.results).toEqual([{ name: 'Alice Smith (@alice)', value: 10 }]); + const httpMock = ctx.helpers.httpRequestWithAuthentication as ReturnType; + expect(httpMock.mock.calls[0][1].url).toContain('/users?limit='); + expect(httpMock.mock.calls[0][1].url).not.toContain('/search/users'); }); - it('should return empty results for empty filter', async () => { - const ctx = createLoadCtx(); + it('should list users for empty filter', async () => { + const ctx = createLoadCtx({ httpResponses: [{ data: [] }] }); const result = await searchUsers.call(ctx, ''); expect(result.results).toEqual([]); + const httpMock = ctx.helpers.httpRequestWithAuthentication as ReturnType; + expect(httpMock.mock.calls[0][1].url).toContain('/users?limit='); }); it('should call search endpoint with encoded query', async () => { diff --git a/integrations/n8n/tests/operation-values.test.ts b/integrations/n8n/tests/operation-values.test.ts new file mode 100644 index 000000000..693781c83 --- /dev/null +++ b/integrations/n8n/tests/operation-values.test.ts @@ -0,0 +1,84 @@ +import { describe, it, expect } from 'vitest'; +import * as fs from 'fs'; +import * as path from 'path'; + +/** + * Operation VALUES are persisted inside users' saved workflows — renaming one + * silently breaks every workflow that used it. + * + * Some values are derived from the spec rather than pinned: a collection GET + * becomes `getAll` only when the endpoint declares a `cursor` query param, + * and plain `get` otherwise. So a backend change that merely adds or drops + * pagination would flip `getAllUsers` ↔ `getUsers` with no code change here. + * + * This guard freezes the values that currently ship. A failure is not + * necessarily a bug — it means a saved-workflow-visible identifier changed and + * someone has to decide whether that is intended (and add a v1-compat alias). + */ + +const NODES_DIR = path.resolve(__dirname, '../nodes/Pachca/V2'); + +/** Every operation value declared in the generated V2 descriptions, by resource. */ +function shippedOperationValues(): Map> { + const byResource = new Map>(); + for (const file of fs.readdirSync(NODES_DIR)) { + if (!file.endsWith('Description.ts')) continue; + const resource = file.replace('Description.ts', ''); + const content = fs.readFileSync(path.join(NODES_DIR, file), 'utf-8'); + // Only the operation selector block, not per-field option lists. + const opBlock = content.match(/name: 'operation'[\s\S]*?\n\t\tdefault: '[^']*',/); + if (!opBlock) continue; + const values = new Set( + [...opBlock[0].matchAll(/\n\t\t\t\tvalue: '([^']+)',/g)].map((m) => m[1]), + ); + byResource.set(resource, values); + } + return byResource; +} + +/** Values that must keep working — derived ones (cursor-dependent) included. */ +const PINNED: Record = { + Chat: ['getAll', 'get', 'create', 'update', 'archive', 'unarchive'], + GroupTag: ['getAll', 'get', 'create', 'update', 'delete', 'getAllUsers'], + User: ['getAll', 'get', 'create', 'update', 'delete'], + Member: ['create', 'delete', 'getAll', 'leave', 'update', 'addGroupTags', 'removeGroupTags'], + Message: ['create', 'get', 'getAll', 'update', 'delete', 'pin', 'unpin', 'unfurl'], + Bot: ['getAll', 'recreateTokenSelf'], +}; + +describe('operation values (saved-workflow contract)', () => { + const shipped = shippedOperationValues(); + + it('discovers the generated descriptions', () => { + expect(shipped.size).toBeGreaterThan(5); + }); + + for (const [resource, values] of Object.entries(PINNED)) { + it(`${resource}: keeps its published operation values`, () => { + const actual = shipped.get(resource); + expect(actual, `no ${resource}Description.ts found`).toBeDefined(); + for (const value of values) { + expect( + actual!.has(value), + `${resource}: operation value "${value}" disappeared — saved workflows reference it`, + ).toBe(true); + } + }); + } + + it('never lands a destructive operation as a resource default', () => { + // A resource's default operation is what runs if someone drops the node in + // and hits Execute. `bot` used to default to recreateTokenSelf. + const destructive = /^(delete|remove|recreateToken|recreateTokenSelf|archive|leave)/; + for (const file of fs.readdirSync(NODES_DIR)) { + if (!file.endsWith('Description.ts')) continue; + const content = fs.readFileSync(path.join(NODES_DIR, file), 'utf-8'); + const opBlock = content.match(/name: 'operation'[\s\S]*?\n\t\tdefault: '([^']*)',/); + if (!opBlock) continue; + expect( + destructive.test(opBlock[1]), + `${file}: default operation "${opBlock[1]}" is destructive`, + ).toBe(false); + } + }); +}); diff --git a/integrations/n8n/tests/router.test.ts b/integrations/n8n/tests/router.test.ts index 8b5bfd5f3..c266630c6 100644 --- a/integrations/n8n/tests/router.test.ts +++ b/integrations/n8n/tests/router.test.ts @@ -530,6 +530,26 @@ describe('Special: avatarUpload', () => { spy.mockRestore(); }); + // userId is a resourceLocator: read raw it stringifies to "[object Object]" + // and the request goes to /users/[object Object]/avatar. The plain-number + // case above is what a workflow saved before the switch still stores. + it('user.updateAvatar resolves a resourceLocator userId', async () => { + const spy = vi.spyOn(GenericFunctions, 'uploadAvatar').mockResolvedValue({ + id: 42, + image_url: 'https://example.com/user-avatar.jpg', + }); + + const ctx = createMockContext({ + resource: 'user', + operation: 'updateAvatar', + params: { image: 'data', userId: { __rl: true, mode: 'list', value: 42 } }, + }); + await runRouter(ctx); + expect(spy.mock.calls[0][2]).toBe('/users/42/avatar'); + + spy.mockRestore(); + }); + it('profile.deleteAvatar sends DELETE /profile/avatar', async () => { const ctx = createMockContext({ resource: 'profile', @@ -1519,3 +1539,59 @@ describe('Pagination: has_next-driven termination + dual-shape fallback', () => expect(ctx._calls.length).toBe(2); }); }); + +// ============================================================================ +// resourceLocator: сплошной прогон по всем операциям с локаторным параметром +// ============================================================================ + +// Ловит целый класс дефектов: ветка роутера, которая читает параметр напрямую +// вместо resolveResourceLocator, подставляет в URL "[object Object]". Так были +// сломаны user.updateAvatar и chat.downloadExport — обе через special-ветки, +// минующие общий сборщик URL. +describe('resourceLocator во всех операциях с локатором', () => { + const LOCATOR_OPS: { resource: string; operation: string; param: string; expect: RegExp }[] = [ + { resource: 'chat', operation: 'get', param: 'id', expect: /\/chats\/77(\?|$)/ }, + { resource: 'chat', operation: 'update', param: 'id', expect: /\/chats\/77(\?|$)/ }, + { resource: 'chat', operation: 'archive', param: 'id', expect: /\/chats\/77\/archive/ }, + { resource: 'chat', operation: 'unarchive', param: 'id', expect: /\/chats\/77\/unarchive/ }, + { resource: 'chat', operation: 'downloadExport', param: 'id', expect: /\/chats\/exports\/77/ }, + { resource: 'member', operation: 'getAll', param: 'id', expect: /\/chats\/77\/members/ }, + { resource: 'member', operation: 'leave', param: 'id', expect: /\/chats\/77\/leave/ }, + { resource: 'user', operation: 'get', param: 'id', expect: /\/users\/77(\?|$)/ }, + { resource: 'user', operation: 'update', param: 'id', expect: /\/users\/77(\?|$)/ }, + { resource: 'user', operation: 'delete', param: 'id', expect: /\/users\/77(\?|$)/ }, + { resource: 'user', operation: 'getStatus', param: 'userId', expect: /\/users\/77\/status/ }, + { resource: 'user', operation: 'updateStatus', param: 'userId', expect: /\/users\/77\/status/ }, + { resource: 'user', operation: 'deleteStatus', param: 'userId', expect: /\/users\/77\/status/ }, + { resource: 'user', operation: 'deleteAvatar', param: 'userId', expect: /\/users\/77\/avatar/ }, + ]; + + for (const c of LOCATOR_OPS) { + it(`${c.resource}.${c.operation}: локатор ${c.param} подставляется в URL`, async () => { + const ctx = createMockContext({ + resource: c.resource, + operation: c.operation, + params: { + [c.param]: { __rl: true, mode: 'list', value: 77 }, + // значения для прочих обязательных полей операций записи + chatName: 'x', content: 'x', emoji: 'x', comment: 'x', + memberIds: '1', groupTagIds: '1', role: 'member', title: 'x', + }, + }); + // Списочные операции разворачивают data — мок по умолчанию отдаёт объект. + if (c.operation === 'getAll') mockPaginatedResponse(ctx, [{ data: [] }]); + await runRouter(ctx); + const urls = ctx._calls.map((call) => call.url); + expect(urls.length).toBeGreaterThan(0); + expect(urls.some((u) => c.expect.test(u))).toBe(true); + expect(urls.some((u) => u.includes('[object'))).toBe(false); + }); + } + + // Форма, сохранённая до перехода на локатор: голое число обязано работать. + it('старое числовое значение параметра остаётся рабочим', async () => { + const ctx = createMockContext({ resource: 'user', operation: 'getStatus', params: { userId: 77 } }); + await runRouter(ctx); + expect(ctx._calls[0].url).toMatch(/\/users\/77\/status/); + }); +}); diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 47a4a57d4..104ea01bd 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 2026.7.2 (27 июля 2026) + +- **Удалено** (files direct-url): Файл теперь добавляется в форму последним — S3 игнорирует поля после файла, из-за чего загрузка отклонялась с 400 +- **Удалено**: Явный `--profile` больше не перебивается переменной `PACHCA_TOKEN` — команда с указанным профилем не уйдёт в чужое пространство +- **Удалено**: Запись (`POST`/`DELETE`/`PATCH`) больше не повторяется автоматически при 503 — повтор мог создать дубль сообщения +- **Удалено**: `Retry-After` в формате даты больше не игнорируется, значение ограничено разумным пределом +- **Удалено** (chats download-export): Имя файла из `Content-Disposition` больше не может увести запись за пределы указанной папки +- **Удалено**: Вывод `-o csv`: ячейки, начинающиеся с `=`, `+`, `-` или `@`, экранируются; объекты и массивы выводятся как JSON, а не `[object Object]` +- **Удалено**: `--timeout` меньше 1 отклоняется, а не приводит к мгновенной отмене запроса +- **Удалено**: Примеры в `--help` подписаны шагом сценария, а не общим заголовком (`reactions remove` больше не подписан «Добавить реакцию») +- **Удалено** (files direct-url): Команда больше не падает с TypeError при успешной загрузке: S3 отвечает 204 с пустым телом, а команда пыталась прочитать из него поле + ## 2026.7.1 (24 июля 2026) - **Добавлено** (threads create): Новая команда — создание самостоятельного треда без привязки к сообщению diff --git a/packages/cli/README.md b/packages/cli/README.md index 9d1bec680..b8c9c2dbc 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -392,7 +392,7 @@ pachca autocomplete powershell # PowerShell completion | Переменная | Описание | |-----------|---------| -| `PACHCA_TOKEN` | Bearer-токен (высший приоритет, удобно для CI) | +| `PACHCA_TOKEN` | Bearer-токен, удобно для CI. Приоритетнее профиля, но флаги `--token` и `--profile` его перебивают | | `PACHCA_PROFILE` | Активный профиль для команды | | `PACHCA_TIMEOUT` | Таймаут запроса в секундах (по умолчанию 30) | | `PACHCA_PROMPT_DISABLED` | Отключить интерактивные промпты | diff --git a/packages/cli/README.template.md b/packages/cli/README.template.md index 4f74cb60a..7b75ec73b 100644 --- a/packages/cli/README.template.md +++ b/packages/cli/README.template.md @@ -209,7 +209,7 @@ pachca autocomplete powershell # PowerShell completion | Переменная | Описание | |-----------|---------| -| `PACHCA_TOKEN` | Bearer-токен (высший приоритет, удобно для CI) | +| `PACHCA_TOKEN` | Bearer-токен, удобно для CI. Приоритетнее профиля, но флаги `--token` и `--profile` его перебивают | | `PACHCA_PROFILE` | Активный профиль для команды | | `PACHCA_TIMEOUT` | Таймаут запроса в секундах (по умолчанию 30) | | `PACHCA_PROMPT_DISABLED` | Отключить интерактивные промпты | diff --git a/packages/cli/oclif.manifest.json b/packages/cli/oclif.manifest.json index 0fc5f053c..5d46995dc 100644 --- a/packages/cli/oclif.manifest.json +++ b/packages/cli/oclif.manifest.json @@ -1 +1 @@ -{"commands":{"api":{"aliases":[],"args":{"method":{"description":"HTTP-метод (GET, POST, PUT, DELETE, PATCH)","name":"method","options":["GET","POST","PUT","DELETE","PATCH"],"required":true},"path":{"description":"Путь API (например, /messages)","name":"path","required":true}},"description":"Произвольный запрос к API. Список и справка: `api ls` (список эндпоинтов), `api <МЕТОД> <путь> --describe` / `--spec` / `--docs`","examples":["<%= config.bin %> api GET /messages --query chat_id=123","<%= config.bin %> api POST /messages -F message[chat_id]=12345 -f message[content]=\"Привет\"","<%= config.bin %> api POST /messages --input payload.json","<%= config.bin %> api POST /messages --data '{\"message\":{\"entity_id\":123,\"content\":\"Привет\"}}'","<%= config.bin %> api GET /profile -o yaml","<%= config.bin %> api ls","<%= config.bin %> api ls --json","<%= config.bin %> api POST /messages --describe","<%= config.bin %> api GET /messages --spec","<%= config.bin %> api POST /messages --docs"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"raw-field":{"char":"f","description":"Строковое поле (key=value)","name":"raw-field","hasDynamicHelp":false,"multiple":true,"type":"option"},"field":{"char":"F","description":"Типизированное поле (числа/boolean автоматически, @file читает файл)","name":"field","hasDynamicHelp":false,"multiple":true,"type":"option"},"input":{"description":"JSON-файл с телом запроса (- для stdin)","name":"input","hasDynamicHelp":false,"multiple":false,"type":"option"},"data":{"description":"Тело запроса инлайн JSON-строкой","name":"data","hasDynamicHelp":false,"multiple":false,"type":"option"},"query":{"description":"Query-параметр (key=value)","name":"query","hasDynamicHelp":false,"multiple":true,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"api","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":false,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","api.js"]},"auth:list":{"aliases":[],"args":{},"description":"Список сохранённых профилей","examples":["<%= config.bin %> auth list","<%= config.bin %> auth list -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","list.js"]},"auth:login":{"aliases":[],"args":{},"description":"Авторизация и сохранение токена","examples":["<%= config.bin %> auth login","<%= config.bin %> auth login --profile personal","<%= config.bin %> auth login --profile ci --token $PACHCA_TOKEN"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Имя профиля (по умолчанию \"default\")","name":"profile","default":"default","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Токен для сохранения (без интерактивного ввода)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:login","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","login.js"]},"auth:logout":{"aliases":[],"args":{"profile":{"description":"Имя профиля для удаления","name":"profile","required":false}},"description":"Удаление сохранённого профиля","examples":["<%= config.bin %> auth logout bot-notify","<%= config.bin %> auth logout"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:logout","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","logout.js"]},"auth:status":{"aliases":[],"args":{},"description":"Статус текущего профиля","examples":["<%= config.bin %> auth status","<%= config.bin %> auth status -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","status.js"]},"auth:switch":{"aliases":[],"args":{"profile":{"description":"Имя профиля для переключения","name":"profile","required":true}},"description":"Переключение активного профиля","examples":["<%= config.bin %> auth switch bot-support"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:switch","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","switch.js"]},"bots:create":{"aliases":[],"args":{},"description":"Новый бот","examples":["Создать бота через API и получить токен:\n $ pachca bots create","Настроить бота с исходящим вебхуком:\n $ pachca bots create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Имя бота (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Никнейм бота. Должен заканчиваться на `_bot`. (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"outgoing-url":{"description":"URL исходящего вебхука","name":"outgoing-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"events":{"description":"События, на которые подписан бот","name":"events","hasDynamicHelp":false,"multiple":false,"type":"option"},"trigger-on":{"description":"Условие срабатывания исходящего вебхука","name":"trigger-on","hasDynamicHelp":false,"multiple":false,"type":"option"},"commands":{"description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","name":"commands","hasDynamicHelp":false,"multiple":false,"type":"option"},"scopes":{"description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.","name":"scopes","hasDynamicHelp":false,"multiple":false,"type":"option"},"template":{"description":"Шаблон форматирования входящего вебхука","name":"template","hasDynamicHelp":false,"multiple":false,"type":"option"},"template-engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","name":"template-engine","hasDynamicHelp":false,"multiple":false,"type":"option"},"challenge-key":{"description":"Название поля проверки для верификации входящего вебхука","name":"challenge-key","hasDynamicHelp":false,"multiple":false,"type":"option"},"link-preview-enabled":{"description":"Показывать превью ссылок в сообщениях входящего вебхука","name":"link-preview-enabled","allowNo":true,"type":"boolean"},"ignore-self-messages":{"description":"Игнорировать входящие сообщения, отправленные самим ботом","name":"ignore-self-messages","allowNo":true,"type":"boolean"},"events-history-enabled":{"description":"Сохранять историю событий бота для последующего получения через метод истории событий","name":"events-history-enabled","allowNo":true,"type":"boolean"},"who-can-add":{"description":"Кто может добавлять бота в чаты","name":"who-can-add","hasDynamicHelp":false,"multiple":false,"type":"option"},"can-edit":{"description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","name":"can-edit","hasDynamicHelp":false,"multiple":false,"type":"option"},"single-chat":{"description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.","name":"single-chat","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"POST","apiPath":"/bots","defaultColumns":["id","webhook","access_token"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","bots","create.js"]},"bots:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Удаление бота","examples":["Найти и удалить бота:\n $ pachca bots delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"DELETE","apiPath":"/bots/{id}","isESM":true,"relativePath":["dist","commands","bots","delete.js"]},"bots:get":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Информация о боте","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:read","apiMethod":"GET","apiPath":"/bots/{id}","defaultColumns":["id","webhook"],"isESM":true,"relativePath":["dist","commands","bots","get.js"]},"bots:list":{"aliases":[],"args":{},"description":"Список ботов","examples":["Найти и удалить бота:\n $ pachca bots list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Поисковая фраза для фильтрации ботов по имени","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:read","apiMethod":"GET","apiPath":"/bots","defaultColumns":["id","webhook"],"isESM":true,"relativePath":["dist","commands","bots","list.js"]},"bots:list-events":{"aliases":[],"args":{},"description":"История событий","examples":["Обработка событий через историю (polling):\n $ pachca bots list-events"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:list-events","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"webhooks:events:read","apiMethod":"GET","apiPath":"/webhooks/events","defaultColumns":["id","created_at","event_type","payload"],"isESM":true,"relativePath":["dist","commands","bots","list-events.js"]},"bots:recreate-token":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Ротация токена бота","examples":["Ротация токена бота:\n $ pachca bots recreate-token"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:recreate-token","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"POST","apiPath":"/bots/{id}/recreate_token","defaultColumns":["id","webhook","access_token"],"isESM":true,"relativePath":["dist","commands","bots","recreate-token.js"]},"bots:recreate-token-self":{"aliases":[],"args":{},"description":"Ротация собственного токена бота","examples":["Ротация токена бота:\n $ pachca bots recreate-token-self"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:recreate-token-self","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bot_self:write","apiMethod":"POST","apiPath":"/bot/recreate_token","defaultColumns":["id","webhook","access_token"],"isESM":true,"relativePath":["dist","commands","bots","recreate-token-self.js"]},"bots:remove-event":{"aliases":[],"args":{"id":{"description":"Идентификатор события (pachca bots list)","name":"id","required":true}},"description":"Удаление события","examples":["Обработка событий через историю (polling):\n $ pachca bots remove-event"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:remove-event","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"webhooks:events:delete","apiMethod":"DELETE","apiPath":"/webhooks/events/{id}","isESM":true,"relativePath":["dist","commands","bots","remove-event.js"]},"bots:update":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Редактирование бота","examples":["Обновить Webhook URL бота:\n $ pachca bots update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Имя бота (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Никнейм бота. Должен заканчиваться на `_bot`. (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"outgoing-url":{"description":"URL исходящего вебхука","name":"outgoing-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"events":{"description":"События, на которые подписан бот","name":"events","hasDynamicHelp":false,"multiple":false,"type":"option"},"trigger-on":{"description":"Условие срабатывания исходящего вебхука","name":"trigger-on","hasDynamicHelp":false,"multiple":false,"type":"option"},"commands":{"description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","name":"commands","hasDynamicHelp":false,"multiple":false,"type":"option"},"scopes":{"description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.","name":"scopes","hasDynamicHelp":false,"multiple":false,"type":"option"},"template":{"description":"Шаблон форматирования входящего вебхука","name":"template","hasDynamicHelp":false,"multiple":false,"type":"option"},"template-engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","name":"template-engine","hasDynamicHelp":false,"multiple":false,"type":"option"},"challenge-key":{"description":"Название поля проверки для верификации входящего вебхука","name":"challenge-key","hasDynamicHelp":false,"multiple":false,"type":"option"},"link-preview-enabled":{"description":"Показывать превью ссылок в сообщениях входящего вебхука","name":"link-preview-enabled","allowNo":true,"type":"boolean"},"ignore-self-messages":{"description":"Игнорировать входящие сообщения, отправленные самим ботом","name":"ignore-self-messages","allowNo":true,"type":"boolean"},"events-history-enabled":{"description":"Сохранять историю событий бота для последующего получения через метод истории событий","name":"events-history-enabled","allowNo":true,"type":"boolean"},"who-can-add":{"description":"Кто может добавлять бота в чаты","name":"who-can-add","hasDynamicHelp":false,"multiple":false,"type":"option"},"can-edit":{"description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","name":"can-edit","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"PUT","apiPath":"/bots/{id}","defaultColumns":["id","webhook"],"isESM":true,"relativePath":["dist","commands","bots","update.js"]},"bots:update-webhook":{"aliases":[],"args":{},"description":"Саморегистрация вебхука бота","examples":["Обновить Webhook URL бота:\n $ pachca bots update-webhook"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"outgoing-url":{"description":"URL исходящего вебхука. Пустая строка отключает вебхук.","name":"outgoing-url","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:update-webhook","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bot_self:webhook:write","apiMethod":"PUT","apiPath":"/bot/webhook","defaultColumns":["id","webhook"],"requiredFlags":["outgoing-url"],"isESM":true,"relativePath":["dist","commands","bots","update-webhook.js"]},"changelog":{"aliases":[],"args":{},"description":"История изменений CLI","examples":["<%= config.bin %> changelog","<%= config.bin %> changelog -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"changelog","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","changelog.js"]},"chats:archive":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Архивация чата","examples":["Архивация и управление чатом:\n $ pachca chats archive","Найти и заархивировать неактивные чаты:\n $ pachca chats archive"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:archive","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:archive","apiMethod":"PUT","apiPath":"/chats/{id}/archive","isESM":true,"relativePath":["dist","commands","chats","archive.js"]},"chats:create":{"aliases":[],"args":{},"description":"Новый чат","examples":["Создать канал и пригласить участников:\n $ pachca chats create","Создать проектную беседу из шаблона:\n $ pachca chats create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"member-ids":{"description":"Массив идентификаторов пользователей, которые станут участниками","name":"member-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"group-tag-ids":{"description":"Массив идентификаторов тегов, которые станут участниками","name":"group-tag-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"channel":{"description":"Является каналом","name":"channel","allowNo":true,"type":"boolean"},"public":{"description":"Открытый доступ","name":"public","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:create","apiMethod":"POST","apiPath":"/chats","defaultColumns":["id","name","created_at","owner_id","channel"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","chats","create.js"]},"chats:download-export":{"aliases":[],"args":{"id":{"description":"Идентификатор экспорта (pachca chats list)","name":"id","required":true}},"description":"Скачать архив экспорта","examples":["Экспорт истории чата:\n $ pachca chats download-export"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"save":{"description":"Путь для сохранения файла","name":"save","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["common:get-exports"],"id":"chats:download-export","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_exports:read","plan":"corporation","apiMethod":"GET","apiPath":"/chats/exports/{id}","isESM":true,"relativePath":["dist","commands","chats","download-export.js"]},"chats:get":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Информация о чате","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:read","apiMethod":"GET","apiPath":"/chats/{id}","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","chats","get.js"]},"chats:list":{"aliases":[],"args":{},"description":"Список чатов","examples":["Найти активные чаты за период:\n $ pachca chats list","Найти и заархивировать неактивные чаты:\n $ pachca chats list","Создать гостя в чат:\n $ pachca chats list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"sort":{"description":"Поле сортировки","name":"sort","default":"id","hasDynamicHelp":false,"multiple":false,"options":["id","last_message_at"],"type":"option"},"order":{"description":"Направление сортировки","name":"order","default":"desc","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"availability":{"description":"Параметр, который отвечает за доступность и выборку чатов для пользователя","name":"availability","default":"is_member","hasDynamicHelp":false,"multiple":false,"options":["is_member","public"],"type":"option"},"last-message-at-after":{"description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-after","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-message-at-before":{"description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-before","hasDynamicHelp":false,"multiple":false,"type":"option"},"personal":{"description":"Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.","name":"personal","allowNo":true,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:read","apiMethod":"GET","apiPath":"/chats","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","chats","list.js"]},"chats:request-export":{"aliases":[],"args":{},"description":"Экспорт сообщений","examples":["Экспорт истории чата:\n $ pachca chats request-export"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"start-at":{"description":"Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","name":"start-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"end-at":{"description":"Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","name":"end-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"webhook-url":{"description":"Адрес, на который будет отправлен вебхук по завершению экспорта","name":"webhook-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-ids":{"description":"Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.","name":"chat-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"skip-chats-file":{"description":"Пропуск формирования файла со списком чатов (chats.json)","name":"skip-chats-file","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":["common:request-export"],"id":"chats:request-export","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_exports:write","plan":"corporation","apiMethod":"POST","apiPath":"/chats/exports","requiredFlags":["start-at","end-at","webhook-url"],"isESM":true,"relativePath":["dist","commands","chats","request-export.js"]},"chats:unarchive":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Разархивация чата","examples":["Архивация и управление чатом:\n $ pachca chats unarchive"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:unarchive","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:archive","apiMethod":"PUT","apiPath":"/chats/{id}/unarchive","isESM":true,"relativePath":["dist","commands","chats","unarchive.js"]},"chats:update":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Редактирование чата","examples":["Переименовать или обновить чат:\n $ pachca chats update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"public":{"description":"Открытый доступ","name":"public","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:update","apiMethod":"PUT","apiPath":"/chats/{id}","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","chats","update.js"]},"commands":{"aliases":[],"args":{},"description":"Список всех команд","examples":["<%= config.bin %> commands","<%= config.bin %> commands --available","<%= config.bin %> commands --available -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"available":{"description":"Показать только команды, доступные текущему токену","name":"available","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"commands","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","commands.js"]},"config:get":{"aliases":[],"args":{"key":{"description":"Ключ настройки","name":"key","required":true}},"description":"Получение значения конфигурации","examples":["<%= config.bin %> config get defaults.output"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"config:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","config","get.js"]},"config:list":{"aliases":[],"args":{},"description":"Список всех настроек","examples":["<%= config.bin %> config list","<%= config.bin %> config list -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"config:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","config","list.js"]},"config:set":{"aliases":[],"args":{"key":{"description":"Ключ настройки","name":"key","required":true},"value":{"description":"Значение настройки","name":"value","required":true}},"description":"Установка значения конфигурации","examples":["<%= config.bin %> config set defaults.output json","<%= config.bin %> config set defaults.timeout 60"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"config:set","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","config","set.js"]},"custom-properties:list":{"aliases":[],"args":{},"description":"Список дополнительных полей","examples":["Получить кастомные поля профиля:\n $ pachca custom-properties list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"entity-type":{"description":"Тип сущности","name":"entity-type","hasDynamicHelp":false,"multiple":false,"options":["User","Task"],"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["common:custom-properties"],"id":"custom-properties:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"custom_properties:read","apiMethod":"GET","apiPath":"/custom_properties","defaultColumns":["id","name","data_type"],"requiredFlags":["entity-type"],"isESM":true,"relativePath":["dist","commands","custom-properties","list.js"]},"doctor":{"aliases":[],"args":{},"description":"Диагностика окружения: Node.js, сеть, токен, конфигурация","examples":["<%= config.bin %> doctor","<%= config.bin %> doctor -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"doctor","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","doctor.js"]},"files:direct-url":{"aliases":[],"args":{},"description":"Загрузка файла","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"direct-url":{"description":"URL для отправки запроса (получается из ответа POST /uploads)","name":"direct-url","required":true,"hasDynamicHelp":false,"multiple":false,"type":"option"},"content-disposition":{"description":"Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"content-disposition","hasDynamicHelp":false,"multiple":false,"type":"option"},"acl":{"description":"Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"acl","hasDynamicHelp":false,"multiple":false,"type":"option"},"policy":{"description":"Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"policy","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-credential":{"description":"Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-credential","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-algorithm":{"description":"Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-algorithm","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-date":{"description":"Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-date","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-signature":{"description":"Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-signature","hasDynamicHelp":false,"multiple":false,"type":"option"},"key":{"description":"Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"key","hasDynamicHelp":false,"multiple":false,"type":"option"},"file":{"description":"Файл для загрузки","name":"file","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["common:direct-url"],"id":"files:direct-url","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"apiMethod":"POST","apiPath":"/direct_url","requiredFlags":["content-disposition","acl","policy","x-amz-credential","x-amz-algorithm","x-amz-date","x-amz-signature","key"],"isESM":true,"relativePath":["dist","commands","files","direct-url.js"]},"files:uploads":{"aliases":[],"args":{},"description":"Получение подписи, ключа и других параметров","examples":["Изменить вложения сообщения:\n $ pachca files uploads"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":["common:uploads"],"id":"files:uploads","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"uploads:write","apiMethod":"POST","apiPath":"/uploads","defaultColumns":["Content-Disposition","acl","policy","x-amz-credential","x-amz-algorithm"],"isESM":true,"relativePath":["dist","commands","files","uploads.js"]},"group-tags:create":{"aliases":[],"args":{},"description":"Новый тег","examples":["Массовое создание сотрудников с тегами:\n $ pachca group-tags create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название тега (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:write","apiMethod":"POST","apiPath":"/group_tags","defaultColumns":["id","name","users_count"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","group-tags","create.js"]},"group-tags:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Удаление тега","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:write","apiMethod":"DELETE","apiPath":"/group_tags/{id}","isESM":true,"relativePath":["dist","commands","group-tags","delete.js"]},"group-tags:get":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Информация о теге","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:read","apiMethod":"GET","apiPath":"/group_tags/{id}","defaultColumns":["id","name","users_count"],"isESM":true,"relativePath":["dist","commands","group-tags","get.js"]},"group-tags:list":{"aliases":[],"args":{},"description":"Список тегов сотрудников","examples":["Получить всех сотрудников тега/департамента:\n $ pachca group-tags list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"names":{"description":"Массив названий тегов, по которым вы хотите отфильтровать список (через запятую)","name":"names","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:read","apiMethod":"GET","apiPath":"/group_tags","defaultColumns":["id","name","users_count"],"isESM":true,"relativePath":["dist","commands","group-tags","list.js"]},"group-tags:list-users":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Список сотрудников тега","examples":["Получить всех сотрудников тега/департамента:\n $ pachca group-tags list-users"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:list-users","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:read","apiMethod":"GET","apiPath":"/group_tags/{id}/users","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","group-tags","list-users.js"]},"group-tags:update":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Редактирование тега","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название тега (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:write","apiMethod":"PUT","apiPath":"/group_tags/{id}","defaultColumns":["id","name","users_count"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","group-tags","update.js"]},"guide":{"aliases":[],"args":{"query":{"description":"Поисковый запрос","name":"query","required":false}},"description":"Поиск сценариев использования","examples":["<%= config.bin %> guide \"отправить файл\"","<%= config.bin %> guide \"создать бота\"","<%= config.bin %> guide"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"guide","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","guide.js"]},"introspect":{"aliases":[],"args":{"command":{"description":"Имя команды (например, \"messages create\")","name":"command","required":false}},"description":"Метаданные команды в машиночитаемом формате","examples":["<%= config.bin %> introspect messages create","<%= config.bin %> introspect"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"introspect","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":false,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","introspect.js"]},"members:add":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (беседа, канал или чат треда)","name":"id","required":true}},"description":"Добавление пользователей","examples":["Подписаться на тред сообщения:\n $ pachca members add","Создать канал и пригласить участников:\n $ pachca members add","Онбординг нового сотрудника:\n $ pachca members add"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"member-ids":{"description":"Массив идентификаторов пользователей, которые станут участниками","name":"member-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"silent":{"description":"Не создавать в чате системное сообщение о добавлении участника","name":"silent","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:add","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"POST","apiPath":"/chats/{id}/members","requiredFlags":["member-ids"],"isESM":true,"relativePath":["dist","commands","members","add.js"]},"members:add-group-tags":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true}},"description":"Добавление тегов","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"group-tag-ids":{"description":"Массив идентификаторов тегов, которые станут участниками","name":"group-tag-ids","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:add-group-tags","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"POST","apiPath":"/chats/{id}/group_tags","requiredFlags":["group-tag-ids"],"isESM":true,"relativePath":["dist","commands","members","add-group-tags.js"]},"members:leave":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true}},"description":"Выход из беседы или канала","examples":["Архивация и управление чатом:\n $ pachca members leave"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:leave","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:leave","apiMethod":"DELETE","apiPath":"/chats/{id}/leave","isESM":true,"relativePath":["dist","commands","members","leave.js"]},"members:list":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true}},"description":"Список участников чата","examples":["Упомянуть пользователя:\n $ pachca members list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"role":{"description":"Роль в чате","name":"role","default":"all","hasDynamicHelp":false,"multiple":false,"options":["all","owner","admin","editor","member"],"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:read","apiMethod":"GET","apiPath":"/chats/{id}/members","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","members","list.js"]},"members:remove":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true},"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Исключение пользователя","examples":["Архивация и управление чатом:\n $ pachca members remove"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:remove","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"DELETE","apiPath":"/chats/{id}/members/{user_id}","isESM":true,"relativePath":["dist","commands","members","remove.js"]},"members:remove-group-tag":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true},"tag_id":{"description":"Идентификатор тега (pachca tags list)","name":"tag_id","required":true}},"description":"Исключение тега","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:remove-group-tag","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"DELETE","apiPath":"/chats/{id}/group_tags/{tag_id}","isESM":true,"relativePath":["dist","commands","members","remove-group-tag.js"]},"members:update":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true},"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Редактирование роли","examples":["Архивация и управление чатом:\n $ pachca members update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"role":{"description":"Роль","name":"role","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"PUT","apiPath":"/chats/{id}/members/{user_id}","requiredFlags":["role"],"isESM":true,"relativePath":["dist","commands","members","update.js"]},"messages:create":{"aliases":[],"args":{},"description":"Новое сообщение","examples":["Найти чат по имени и отправить сообщение:\n $ pachca messages create","Отправить сообщение в канал или беседу (если chat_id известен):\n $ pachca messages create","Отправить личное сообщение пользователю:\n $ pachca messages create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"entity-type":{"description":"Тип сущности","name":"entity-type","hasDynamicHelp":false,"multiple":false,"type":"option"},"entity-id":{"description":"Идентификатор сущности (pachca chats list | pachca users list)","name":"entity-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"content":{"description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"files":{"description":"Прикрепляемые файлы","name":"files","hasDynamicHelp":false,"multiple":false,"type":"option"},"buttons":{"description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.","name":"buttons","hasDynamicHelp":false,"multiple":false,"type":"option"},"parent-message-id":{"description":"Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.","name":"parent-message-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-avatar-url":{"description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. (макс. 255 символов)","name":"display-avatar-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-name":{"description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. (макс. 255 символов)","name":"display-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"skip-invite-mentions":{"description":"Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.","name":"skip-invite-mentions","allowNo":true,"type":"boolean"},"link-preview":{"description":"Отображение предпросмотра первой найденной ссылки в тексте сообщения","name":"link-preview","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:create","apiMethod":"POST","apiPath":"/messages","defaultColumns":["id","content","created_at","entity_type","entity_id"],"requiredFlags":["entity-id","content"],"isESM":true,"relativePath":["dist","commands","messages","create.js"]},"messages:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Удаление сообщения","examples":["Удалить сообщение:\n $ pachca messages delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:delete","apiMethod":"DELETE","apiPath":"/messages/{id}","isESM":true,"relativePath":["dist","commands","messages","delete.js"]},"messages:get":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Информация о сообщении","examples":["Получить вложения из сообщения:\n $ pachca messages get","Изменить вложения сообщения:\n $ pachca messages get","Обработать входящий вебхук-событие:\n $ pachca messages get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:read","apiMethod":"GET","apiPath":"/messages/{id}","defaultColumns":["id","content","created_at","entity_type","entity_id"],"isESM":true,"relativePath":["dist","commands","messages","get.js"]},"messages:list":{"aliases":[],"args":{"chat_id":{"description":"Идентификатор чата (беседа, канал, диалог или чат треда)","name":"chat_id","required":false}},"description":"Список сообщений чата","examples":["Получить историю сообщений чата:\n $ pachca messages list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"chat-id":{"description":"Идентификатор чата (беседа, канал, диалог или чат треда)","name":"chat-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"sort":{"description":"Поле сортировки","name":"sort","default":"id","hasDynamicHelp":false,"multiple":false,"options":["id"],"type":"option"},"order":{"description":"Направление сортировки","name":"order","default":"desc","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:read","apiMethod":"GET","apiPath":"/messages","defaultColumns":["id","content","created_at","entity_type","entity_id"],"requiredFlags":["chat-id"],"isESM":true,"relativePath":["dist","commands","messages","list.js"]},"messages:pin":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Закрепление сообщения","examples":["Закрепить/открепить сообщение:\n $ pachca messages pin"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:pin","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"pins:write","apiMethod":"POST","apiPath":"/messages/{id}/pin","isESM":true,"relativePath":["dist","commands","messages","pin.js"]},"messages:unfurl":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Unfurl (разворачивание ссылок)","examples":["Разворачивание ссылок (unfurling):\n $ pachca messages unfurl"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"link-previews":{"description":"`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.","name":"link-previews","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["link-previews:add"],"id":"messages:unfurl","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"link_previews:write","apiMethod":"POST","apiPath":"/messages/{id}/link_previews","requiredFlags":["link-previews"],"isESM":true,"relativePath":["dist","commands","messages","unfurl.js"]},"messages:unpin":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Открепление сообщения","examples":["Закрепить/открепить сообщение:\n $ pachca messages unpin"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:unpin","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"pins:write","apiMethod":"DELETE","apiPath":"/messages/{id}/pin","isESM":true,"relativePath":["dist","commands","messages","unpin.js"]},"messages:update":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Редактирование сообщения","examples":["Отредактировать сообщение:\n $ pachca messages update","Изменить вложения сообщения:\n $ pachca messages update","Обработать нажатие кнопки (callback):\n $ pachca messages update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"content":{"description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"files":{"description":"Прикрепляемые файлы","name":"files","hasDynamicHelp":false,"multiple":false,"type":"option"},"buttons":{"description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.","name":"buttons","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-avatar-url":{"description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","name":"display-avatar-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-name":{"description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","name":"display-name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:update","apiMethod":"PUT","apiPath":"/messages/{id}","defaultColumns":["id","content","created_at","entity_type","entity_id"],"isESM":true,"relativePath":["dist","commands","messages","update.js"]},"oauth:token-info":{"aliases":[],"args":{},"description":"Информация о токене","examples":["Проверить свой токен:\n $ pachca oauth token-info"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":["profile:get-info"],"id":"oauth:token-info","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"apiMethod":"GET","apiPath":"/oauth/token/info","defaultColumns":["id","name","created_at","token","user_id"],"isESM":true,"relativePath":["dist","commands","oauth","token-info.js"]},"profile:delete-avatar":{"aliases":[],"args":{},"description":"Удаление своего аватара","examples":["Удалить аватар профиля:\n $ pachca profile delete-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:delete-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_avatar:write","apiMethod":"DELETE","apiPath":"/profile/avatar","isESM":true,"relativePath":["dist","commands","profile","delete-avatar.js"]},"profile:delete-status":{"aliases":[],"args":{},"description":"Удаление своего статуса","examples":["Сбросить статус:\n $ pachca profile delete-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:delete-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_status:write","apiMethod":"DELETE","apiPath":"/profile/status","isESM":true,"relativePath":["dist","commands","profile","delete-status.js"]},"profile:get":{"aliases":[],"args":{},"description":"Свой профиль","examples":["Получить свой профиль:\n $ pachca profile get","Получить кастомные поля профиля:\n $ pachca profile get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile:read","apiMethod":"GET","apiPath":"/profile","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","profile","get.js"]},"profile:get-status":{"aliases":[],"args":{},"description":"Свой статус","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:get-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_status:read","apiMethod":"GET","apiPath":"/profile/status","defaultColumns":["title","emoji","expires_at","is_away"],"isESM":true,"relativePath":["dist","commands","profile","get-status.js"]},"profile:update-avatar":{"aliases":[],"args":{},"description":"Загрузка своего аватара","examples":["Загрузить аватар профиля:\n $ pachca profile update-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"file":{"description":"Файл изображения для аватара","name":"file","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:update-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_avatar:write","apiMethod":"PUT","apiPath":"/profile/avatar","defaultColumns":["image_url"],"isESM":true,"relativePath":["dist","commands","profile","update-avatar.js"]},"profile:update-status":{"aliases":[],"args":{},"description":"Новый свой статус","examples":["Установить статус:\n $ pachca profile update-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"emoji":{"description":"Emoji символ статуса","name":"emoji","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Текст статуса (макс. 50 символов)","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"expires-at":{"description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","name":"expires-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"is-away":{"description":"Режим «Нет на месте»","name":"is-away","allowNo":true,"type":"boolean"},"away-message":{"description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. (макс. 1024 символов)","name":"away-message","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:update-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_status:write","apiMethod":"PUT","apiPath":"/profile/status","defaultColumns":["title","emoji","expires_at","is_away"],"requiredFlags":["emoji","title"],"isESM":true,"relativePath":["dist","commands","profile","update-status.js"]},"reactions:add":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Добавление реакции","examples":["Добавить реакцию на сообщение:\n $ pachca reactions add"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"code":{"description":"Emoji символ реакции","name":"code","hasDynamicHelp":false,"multiple":false,"type":"option"},"name":{"description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"reactions:add","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"reactions:write","apiMethod":"POST","apiPath":"/messages/{id}/reactions","defaultColumns":["name","created_at","user_id","code"],"requiredFlags":["code"],"isESM":true,"relativePath":["dist","commands","reactions","add.js"]},"reactions:list":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Список реакций","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"reactions:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"reactions:read","apiMethod":"GET","apiPath":"/messages/{id}/reactions","defaultColumns":["name","created_at","user_id","code"],"isESM":true,"relativePath":["dist","commands","reactions","list.js"]},"reactions:remove":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Удаление реакции","examples":["Добавить реакцию на сообщение:\n $ pachca reactions remove"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"code":{"description":"Emoji символ реакции","name":"code","hasDynamicHelp":false,"multiple":false,"type":"option"},"name":{"description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"reactions:remove","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"reactions:write","apiMethod":"DELETE","apiPath":"/messages/{id}/reactions","requiredFlags":["code"],"isESM":true,"relativePath":["dist","commands","reactions","remove.js"]},"read-member:list-readers":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Список прочитавших сообщение","examples":["Проверить, кто прочитал сообщение:\n $ pachca read-member list-readers"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"read-member:list-readers","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:read","apiMethod":"GET","apiPath":"/messages/{id}/read_member_ids","isESM":true,"relativePath":["dist","commands","read-member","list-readers.js"]},"search:list-chats":{"aliases":[],"args":{},"description":"Поиск чатов","examples":["Найти чат по имени и отправить сообщение:\n $ pachca search list-chats","Найти чат по названию:\n $ pachca search list-chats"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Текст поискового запроса","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"order":{"description":"Направление сортировки","name":"order","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"created-from":{"description":"Фильтр по дате создания (от)","name":"created-from","hasDynamicHelp":false,"multiple":false,"type":"option"},"created-to":{"description":"Фильтр по дате создания (до)","name":"created-to","hasDynamicHelp":false,"multiple":false,"type":"option"},"active":{"description":"Фильтр по активности чата","name":"active","allowNo":true,"type":"boolean"},"chat-subtype":{"description":"Фильтр по типу чата","name":"chat-subtype","hasDynamicHelp":false,"multiple":false,"options":["discussion","thread"],"type":"option"},"personal":{"description":"Фильтр по личным чатам","name":"personal","allowNo":true,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"search:list-chats","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"search:chats","apiMethod":"GET","apiPath":"/search/chats","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","search","list-chats.js"]},"search:list-messages":{"aliases":[],"args":{},"description":"Поиск сообщений","examples":["Найти сообщение по тексту:\n $ pachca search list-messages"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Текст поискового запроса","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"order":{"description":"Направление сортировки","name":"order","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"sort":{"description":"Сортировка результатов","name":"sort","default":"created_at","hasDynamicHelp":false,"multiple":false,"options":["created_at","relevance"],"type":"option"},"created-from":{"description":"Фильтр по дате создания (от)","name":"created-from","hasDynamicHelp":false,"multiple":false,"type":"option"},"created-to":{"description":"Фильтр по дате создания (до)","name":"created-to","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-ids":{"description":"Фильтр по ID чатов (через запятую)","name":"chat-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"user-ids":{"description":"Фильтр по ID авторов сообщений (через запятую)","name":"user-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"active":{"description":"Фильтр по активности чата","name":"active","allowNo":true,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"search:list-messages","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"search:messages","apiMethod":"GET","apiPath":"/search/messages","defaultColumns":["id","content","created_at","entity_type","entity_id"],"isESM":true,"relativePath":["dist","commands","search","list-messages.js"]},"search:list-users":{"aliases":[],"args":{},"description":"Поиск сотрудников","examples":["Отправить личное сообщение пользователю:\n $ pachca search list-users","Упомянуть пользователя:\n $ pachca search list-users","Найти сотрудника по имени:\n $ pachca search list-users"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Текст поискового запроса","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"sort":{"description":"Сортировка результатов","name":"sort","hasDynamicHelp":false,"multiple":false,"options":["by_score","alphabetical","creation"],"type":"option"},"order":{"description":"Направление сортировки","name":"order","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"created-from":{"description":"Фильтр по дате создания (от)","name":"created-from","hasDynamicHelp":false,"multiple":false,"type":"option"},"created-to":{"description":"Фильтр по дате создания (до)","name":"created-to","hasDynamicHelp":false,"multiple":false,"type":"option"},"company-roles":{"description":"Фильтр по ролям сотрудников (через запятую)","name":"company-roles","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"search:list-users","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"search:users","apiMethod":"GET","apiPath":"/search/users","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","search","list-users.js"]},"security:list":{"aliases":[],"args":{},"description":"Журнал аудита событий","examples":["Получить журнал аудита событий:\n $ pachca security list","Мониторинг подозрительных входов:\n $ pachca security list","Экспорт логов за период:\n $ pachca security list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"start-time":{"description":"Начальная метка времени (включительно)","name":"start-time","hasDynamicHelp":false,"multiple":false,"type":"option"},"end-time":{"description":"Конечная метка времени (исключительно)","name":"end-time","hasDynamicHelp":false,"multiple":false,"type":"option"},"event-key":{"description":"Фильтр по конкретному типу события","name":"event-key","hasDynamicHelp":false,"multiple":false,"options":["user_login","user_logout","user_2fa_fail","user_2fa_success","user_created","user_deleted","user_role_changed","user_updated","tag_created","tag_deleted","user_added_to_tag","user_removed_from_tag","chat_created","chat_renamed","chat_permission_changed","user_chat_join","user_chat_leave","tag_added_to_chat","tag_removed_from_chat","message_updated","message_deleted","message_created","reaction_created","reaction_deleted","thread_created","access_token_created","access_token_updated","access_token_destroy","kms_encrypt","kms_decrypt","audit_events_accessed","dlp_violation_detected","search_users_api","search_chats_api","search_messages_api","bot_scopes_updated","bot_webhook_settings_updated","bot_token_recreated","bot_deleted","video_call_started","video_call_finished","video_call_recording_ready"],"type":"option"},"actor-id":{"description":"Идентификатор пользователя, выполнившего действие","name":"actor-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"actor-type":{"description":"Тип актора","name":"actor-type","hasDynamicHelp":false,"multiple":false,"type":"option"},"entity-id":{"description":"Идентификатор затронутой сущности","name":"entity-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"entity-type":{"description":"Тип сущности","name":"entity-type","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"security:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"audit_events:read","plan":"corporation","apiMethod":"GET","apiPath":"/audit_events","defaultColumns":["id","created_at","event_key","entity_id","entity_type"],"isESM":true,"relativePath":["dist","commands","security","list.js"]},"tasks:create":{"aliases":[],"args":{},"description":"Новое напоминание","examples":["Форма заявки/запроса:\n $ pachca tasks create","Создать напоминание:\n $ pachca tasks create","Создать серию напоминаний:\n $ pachca tasks create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"kind":{"description":"Тип","name":"kind","hasDynamicHelp":false,"multiple":false,"type":"option"},"content":{"description":"Описание (по умолчанию — название типа)","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"due-at":{"description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","name":"due-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"priority":{"description":"Приоритет: 1, 2 (важно) или 3 (очень важно).","name":"priority","hasDynamicHelp":false,"multiple":false,"type":"option"},"performer-ids":{"description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)","name":"performer-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-id":{"description":"Идентификатор чата, к которому привязывается напоминание (pachca chats list)","name":"chat-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"all-day":{"description":"Напоминание на весь день (без указания времени)","name":"all-day","allowNo":true,"type":"boolean"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:create","apiMethod":"POST","apiPath":"/tasks","defaultColumns":["id","content","created_at","kind","due_at"],"requiredFlags":["kind"],"isESM":true,"relativePath":["dist","commands","tasks","create.js"]},"tasks:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор напоминания (pachca tasks list)","name":"id","required":true}},"description":"Удаление напоминания","examples":["Удалить задачу:\n $ pachca tasks delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:delete","apiMethod":"DELETE","apiPath":"/tasks/{id}","isESM":true,"relativePath":["dist","commands","tasks","delete.js"]},"tasks:get":{"aliases":[],"args":{"id":{"description":"Идентификатор напоминания (pachca tasks list)","name":"id","required":true}},"description":"Информация о напоминании","examples":["Получить задачу по ID:\n $ pachca tasks get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:read","apiMethod":"GET","apiPath":"/tasks/{id}","defaultColumns":["id","content","created_at","kind","due_at"],"isESM":true,"relativePath":["dist","commands","tasks","get.js"]},"tasks:list":{"aliases":[],"args":{},"description":"Список напоминаний","examples":["Получить список предстоящих задач:\n $ pachca tasks list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:read","apiMethod":"GET","apiPath":"/tasks","defaultColumns":["id","content","created_at","kind","due_at"],"isESM":true,"relativePath":["dist","commands","tasks","list.js"]},"tasks:update":{"aliases":[],"args":{"id":{"description":"Идентификатор напоминания (pachca tasks list)","name":"id","required":true}},"description":"Редактирование напоминания","examples":["Отметить задачу выполненной:\n $ pachca tasks update","Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"kind":{"description":"Тип","name":"kind","hasDynamicHelp":false,"multiple":false,"type":"option"},"content":{"description":"Описание","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"due-at":{"description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","name":"due-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"priority":{"description":"Приоритет: 1, 2 (важно) или 3 (очень важно).","name":"priority","hasDynamicHelp":false,"multiple":false,"type":"option"},"performer-ids":{"description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»","name":"performer-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"status":{"description":"Статус","name":"status","hasDynamicHelp":false,"multiple":false,"type":"option"},"all-day":{"description":"Напоминание на весь день (без указания времени)","name":"all-day","allowNo":true,"type":"boolean"},"done-at":{"description":"Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","name":"done-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:update","apiMethod":"PUT","apiPath":"/tasks/{id}","defaultColumns":["id","content","created_at","kind","due_at"],"isESM":true,"relativePath":["dist","commands","tasks","update.js"]},"threads:add":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Новый тред","examples":["Ответить в тред (комментарий к сообщению):\n $ pachca thread add","Подписаться на тред сообщения:\n $ pachca thread add"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:add","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:create","apiMethod":"POST","apiPath":"/messages/{id}/thread","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","add.js"]},"threads:create":{"aliases":[],"args":{},"description":"Новый самостоятельный тред","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:create","apiMethod":"POST","apiPath":"/threads","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","create.js"]},"threads:get":{"aliases":[],"args":{"id":{"description":"Идентификатор треда","name":"id","required":true}},"description":"Информация о треде","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:read","apiMethod":"GET","apiPath":"/threads/{id}","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","get.js"]},"threads:list":{"aliases":[],"args":{},"description":"Список тредов","examples":["Получить список активных тредов за период:\n $ pachca threads list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"last-message-at-after":{"description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-after","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-message-at-before":{"description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-before","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:read","apiMethod":"GET","apiPath":"/threads","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","list.js"]},"upgrade":{"aliases":[],"args":{},"description":"Обновить CLI до последней версии","examples":["<%= config.bin %> upgrade"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"upgrade","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","upgrade.js"]},"upload":{"aliases":[],"args":{"file":{"description":"Путь к файлу или - для stdin","name":"file","required":true}},"description":"Загрузить файл (получает подпись и загружает автоматически)","examples":["<%= config.bin %> upload photo.jpg","cat data.csv | <%= config.bin %> upload -"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"upload","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"uploads:write","isESM":true,"relativePath":["dist","commands","upload.js"]},"users:create":{"aliases":[],"args":{},"description":"Новый сотрудник","examples":["Массовое создание сотрудников с тегами:\n $ pachca users create","Создать гостя в чат:\n $ pachca users create","Онбординг нового сотрудника:\n $ pachca users create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"first-name":{"description":"Имя (макс. 255 символов)","name":"first-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-name":{"description":"Фамилия (макс. 255 символов)","name":"last-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"email":{"description":"Электронная почта (макс. 255 символов)","name":"email","hasDynamicHelp":false,"multiple":false,"type":"option"},"phone-number":{"description":"Телефон (макс. 255 символов)","name":"phone-number","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Имя пользователя (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"department":{"description":"Департамент (макс. 255 символов)","name":"department","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Должность","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"role":{"description":"Уровень доступа","name":"role","hasDynamicHelp":false,"multiple":false,"type":"option"},"suspended":{"description":"Деактивация пользователя","name":"suspended","allowNo":true,"type":"boolean"},"list-tags":{"description":"Массив тегов, привязываемых к сотруднику","name":"list-tags","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-ids":{"description":"Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.","name":"chat-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"},"skip-email-notify":{"description":"Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.","name":"skip-email-notify","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:create","apiMethod":"POST","apiPath":"/users","defaultColumns":["id","title","first_name","last_name","email"],"requiredFlags":["email"],"isESM":true,"relativePath":["dist","commands","users","create.js"]},"users:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор пользователя (pachca users list)","name":"id","required":true}},"description":"Удаление сотрудника","examples":["Offboarding сотрудника:\n $ pachca users delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:delete","apiMethod":"DELETE","apiPath":"/users/{id}","isESM":true,"relativePath":["dist","commands","users","delete.js"]},"users:get":{"aliases":[],"args":{"id":{"description":"Идентификатор пользователя (pachca users list)","name":"id","required":true}},"description":"Информация о сотруднике","examples":["Получить сотрудника по ID:\n $ pachca users get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:read","apiMethod":"GET","apiPath":"/users/{id}","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","users","get.js"]},"users:get-status":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Статус сотрудника","examples":["Управление статусом сотрудника:\n $ pachca users get-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:get-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_status:read","apiMethod":"GET","apiPath":"/users/{user_id}/status","defaultColumns":["title","emoji","expires_at","is_away"],"isESM":true,"relativePath":["dist","commands","users","get-status.js"]},"users:list":{"aliases":[],"args":{},"description":"Список сотрудников","examples":["Проверить, кто прочитал сообщение:\n $ pachca users list","Разослать уведомление нескольким пользователям:\n $ pachca users list","Найти сотрудника по имени или email:\n $ pachca users list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:read","apiMethod":"GET","apiPath":"/users","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","users","list.js"]},"users:remove-avatar":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Удаление аватара сотрудника","examples":["Удалить аватар сотрудника:\n $ pachca users remove-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:remove-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_avatar:write","apiMethod":"DELETE","apiPath":"/users/{user_id}/avatar","isESM":true,"relativePath":["dist","commands","users","remove-avatar.js"]},"users:remove-status":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Удаление статуса сотрудника","examples":["Управление статусом сотрудника:\n $ pachca users remove-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:remove-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_status:write","apiMethod":"DELETE","apiPath":"/users/{user_id}/status","isESM":true,"relativePath":["dist","commands","users","remove-status.js"]},"users:update":{"aliases":[],"args":{"id":{"description":"Идентификатор пользователя (pachca users list)","name":"id","required":true}},"description":"Редактирование сотрудника","examples":["Массовое создание сотрудников с тегами:\n $ pachca users update","Offboarding сотрудника:\n $ pachca users update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"first-name":{"description":"Имя (макс. 255 символов)","name":"first-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-name":{"description":"Фамилия (макс. 255 символов)","name":"last-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"email":{"description":"Электронная почта (макс. 255 символов)","name":"email","hasDynamicHelp":false,"multiple":false,"type":"option"},"phone-number":{"description":"Телефон (макс. 255 символов)","name":"phone-number","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Имя пользователя (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"department":{"description":"Департамент (макс. 255 символов)","name":"department","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Должность","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"role":{"description":"Уровень доступа","name":"role","hasDynamicHelp":false,"multiple":false,"type":"option"},"suspended":{"description":"Деактивация пользователя","name":"suspended","allowNo":true,"type":"boolean"},"list-tags":{"description":"Массив тегов, привязываемых к сотруднику","name":"list-tags","hasDynamicHelp":false,"multiple":false,"type":"option"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:update","apiMethod":"PUT","apiPath":"/users/{id}","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","users","update.js"]},"users:update-avatar":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Загрузка аватара сотрудника","examples":["Загрузить аватар сотрудника:\n $ pachca users update-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"file":{"description":"Файл изображения для аватара","name":"file","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:update-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_avatar:write","apiMethod":"PUT","apiPath":"/users/{user_id}/avatar","defaultColumns":["image_url"],"isESM":true,"relativePath":["dist","commands","users","update-avatar.js"]},"users:update-status":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Новый статус сотрудника","examples":["Управление статусом сотрудника:\n $ pachca users update-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"emoji":{"description":"Emoji символ статуса","name":"emoji","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Текст статуса (макс. 50 символов)","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"expires-at":{"description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","name":"expires-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"is-away":{"description":"Режим «Нет на месте»","name":"is-away","allowNo":true,"type":"boolean"},"away-message":{"description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. (макс. 1024 символов)","name":"away-message","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:update-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_status:write","apiMethod":"PUT","apiPath":"/users/{user_id}/status","defaultColumns":["title","emoji","expires_at","is_away"],"requiredFlags":["emoji","title"],"isESM":true,"relativePath":["dist","commands","users","update-status.js"]},"version":{"aliases":[],"args":{},"description":"Версия CLI","examples":["<%= config.bin %> version"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"version","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","version.js"]},"views:open":{"aliases":[],"args":{},"description":"Открытие представления","examples":["Показать интерактивную форму пользователю:\n $ pachca views open","Опрос сотрудников через форму:\n $ pachca views open","Форма заявки/запроса:\n $ pachca views open"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"title":{"description":"Заголовок представления (макс. 24 символов)","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"close-text":{"description":"Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. (макс. 24 символов)","name":"close-text","hasDynamicHelp":false,"multiple":false,"type":"option"},"submit-text":{"description":"Текст кнопки отправки формы (макс. 24 символов)","name":"submit-text","hasDynamicHelp":false,"multiple":false,"type":"option"},"blocks":{"description":"Массив блоков представления","name":"blocks","hasDynamicHelp":false,"multiple":false,"type":"option"},"type":{"description":"Способ открытия представления","name":"type","hasDynamicHelp":false,"multiple":false,"options":["modal"],"type":"option"},"trigger-id":{"description":"Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)","name":"trigger-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"private-metadata":{"description":"Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. (макс. 3000 символов)","name":"private-metadata","hasDynamicHelp":false,"multiple":false,"type":"option"},"callback-id":{"description":"Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. (макс. 255 символов)","name":"callback-id","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"views:open","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"views:write","apiMethod":"POST","apiPath":"/views/open","requiredFlags":["title","blocks","type","trigger-id"],"isESM":true,"relativePath":["dist","commands","views","open.js"]}},"version":"0.0.0"} \ No newline at end of file +{"commands":{"api":{"aliases":[],"args":{"method":{"description":"HTTP-метод (GET, POST, PUT, DELETE, PATCH)","name":"method","options":["GET","POST","PUT","DELETE","PATCH"],"required":true},"path":{"description":"Путь API (например, /messages)","name":"path","required":true}},"description":"Произвольный запрос к API. Список и справка: `api ls` (список эндпоинтов), `api <МЕТОД> <путь> --describe` / `--spec` / `--docs`","examples":["<%= config.bin %> api GET /messages --query chat_id=123","<%= config.bin %> api POST /messages -F message[chat_id]=12345 -f message[content]=\"Привет\"","<%= config.bin %> api POST /messages --input payload.json","<%= config.bin %> api POST /messages --data '{\"message\":{\"entity_id\":123,\"content\":\"Привет\"}}'","<%= config.bin %> api GET /profile -o yaml","<%= config.bin %> api ls","<%= config.bin %> api ls --json","<%= config.bin %> api POST /messages --describe","<%= config.bin %> api GET /messages --spec","<%= config.bin %> api POST /messages --docs"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"raw-field":{"char":"f","description":"Строковое поле (key=value)","name":"raw-field","hasDynamicHelp":false,"multiple":true,"type":"option"},"field":{"char":"F","description":"Типизированное поле (числа/boolean автоматически, @file читает файл)","name":"field","hasDynamicHelp":false,"multiple":true,"type":"option"},"input":{"description":"JSON-файл с телом запроса (- для stdin)","name":"input","hasDynamicHelp":false,"multiple":false,"type":"option"},"data":{"description":"Тело запроса инлайн JSON-строкой","name":"data","hasDynamicHelp":false,"multiple":false,"type":"option"},"query":{"description":"Query-параметр (key=value)","name":"query","hasDynamicHelp":false,"multiple":true,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"api","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":false,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","api.js"]},"auth:list":{"aliases":[],"args":{},"description":"Список сохранённых профилей","examples":["<%= config.bin %> auth list","<%= config.bin %> auth list -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","list.js"]},"auth:login":{"aliases":[],"args":{},"description":"Авторизация и сохранение токена","examples":["<%= config.bin %> auth login","<%= config.bin %> auth login --profile personal","<%= config.bin %> auth login --profile ci --token $PACHCA_TOKEN"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Имя профиля (по умолчанию \"default\")","name":"profile","default":"default","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Токен для сохранения (без интерактивного ввода)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:login","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","login.js"]},"auth:logout":{"aliases":[],"args":{"profile":{"description":"Имя профиля для удаления","name":"profile","required":false}},"description":"Удаление сохранённого профиля","examples":["<%= config.bin %> auth logout bot-notify","<%= config.bin %> auth logout"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:logout","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","logout.js"]},"auth:status":{"aliases":[],"args":{},"description":"Статус текущего профиля","examples":["<%= config.bin %> auth status","<%= config.bin %> auth status -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","status.js"]},"auth:switch":{"aliases":[],"args":{"profile":{"description":"Имя профиля для переключения","name":"profile","required":true}},"description":"Переключение активного профиля","examples":["<%= config.bin %> auth switch bot-support"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"auth:switch","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","auth","switch.js"]},"bots:create":{"aliases":[],"args":{},"description":"Новый бот","examples":["Создать бота через API и получить токен — Создай бота. Только пользовательским токеном (не токеном бота); `nickname` обязан заканчиваться на `_bot`. Параметры вебхука (Webhook URL, события, команды) можно задать сразу или позже. Скоупы токена бота можно ограничить флагом `--scopes` (если не указать — бот получит набор по умолчанию):\n $ pachca bots create","Настроить бота с исходящим вебхуком — Создай бота, сразу указав Webhook URL и события в одном вызове (детали создания и работы с токеном — в сценарии «Создать бота через API и получить токен»):\n $ pachca bots create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Имя бота (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Никнейм бота. Должен заканчиваться на `_bot`. (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"outgoing-url":{"description":"URL исходящего вебхука","name":"outgoing-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"events":{"description":"События, на которые подписан бот","name":"events","hasDynamicHelp":false,"multiple":false,"type":"option"},"trigger-on":{"description":"Условие срабатывания исходящего вебхука","name":"trigger-on","hasDynamicHelp":false,"multiple":false,"type":"option"},"commands":{"description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","name":"commands","hasDynamicHelp":false,"multiple":false,"type":"option"},"scopes":{"description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.","name":"scopes","hasDynamicHelp":false,"multiple":false,"type":"option"},"template":{"description":"Шаблон форматирования входящего вебхука","name":"template","hasDynamicHelp":false,"multiple":false,"type":"option"},"template-engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","name":"template-engine","hasDynamicHelp":false,"multiple":false,"type":"option"},"challenge-key":{"description":"Название поля проверки для верификации входящего вебхука","name":"challenge-key","hasDynamicHelp":false,"multiple":false,"type":"option"},"link-preview-enabled":{"description":"Показывать превью ссылок в сообщениях входящего вебхука","name":"link-preview-enabled","allowNo":true,"type":"boolean"},"ignore-self-messages":{"description":"Игнорировать входящие сообщения, отправленные самим ботом","name":"ignore-self-messages","allowNo":true,"type":"boolean"},"events-history-enabled":{"description":"Сохранять историю событий бота для последующего получения через метод истории событий","name":"events-history-enabled","allowNo":true,"type":"boolean"},"who-can-add":{"description":"Кто может добавлять бота в чаты","name":"who-can-add","hasDynamicHelp":false,"multiple":false,"type":"option"},"can-edit":{"description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","name":"can-edit","hasDynamicHelp":false,"multiple":false,"type":"option"},"single-chat":{"description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.","name":"single-chat","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"POST","apiPath":"/bots","defaultColumns":["id","webhook","access_token"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","bots","create.js"]},"bots:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Удаление бота","examples":["Найти и удалить бота — Возьми `id` нужного бота из списка и удали его (скоуп `bots:write`). Доступно администратору, владельцу компании или создателю бота — владельцы чатов удалять бота не могут. Прежний токен инвалидируется сразу, бот исключается из всех чатов, его исходящий вебхук удаляется:\n $ pachca bots delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"DELETE","apiPath":"/bots/{id}","isESM":true,"relativePath":["dist","commands","bots","delete.js"]},"bots:get":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Информация о боте","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:read","apiMethod":"GET","apiPath":"/bots/{id}","defaultColumns":["id","webhook"],"isESM":true,"relativePath":["dist","commands","bots","get.js"]},"bots:list":{"aliases":[],"args":{},"description":"Список ботов","examples":["Найти и удалить бота — Пользовательским токеном (скоуп `bots:read`) получи список ботов, доступных тебе для редактирования: созданных тобой и тех, чьи настройки открывают тебе доступ. Фильтруй по имени параметром `query`, следующую страницу бери из `meta.paginate.next_page`:\n $ pachca bots list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Поисковая фраза для фильтрации ботов по имени","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:read","apiMethod":"GET","apiPath":"/bots","defaultColumns":["id","webhook"],"isESM":true,"relativePath":["dist","commands","bots","list.js"]},"bots:list-events":{"aliases":[],"args":{},"description":"История событий","examples":["Обработка событий через историю (polling) — Получи накопленные события:\n $ pachca bots list-events"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:list-events","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"webhooks:events:read","apiMethod":"GET","apiPath":"/webhooks/events","defaultColumns":["id","created_at","event_type","payload"],"isESM":true,"relativePath":["dist","commands","bots","list-events.js"]},"bots:recreate-token":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Ротация токена бота","examples":["Ротация токена бота — Пользовательским токеном (администратор, владелец компании или создатель бота) — перевыпусти токен по `id` бота. Прежний токен инвалидируется сразу:\n $ pachca bots recreate-token"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:recreate-token","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"POST","apiPath":"/bots/{id}/recreate_token","defaultColumns":["id","webhook","access_token"],"isESM":true,"relativePath":["dist","commands","bots","recreate-token.js"]},"bots:recreate-token-self":{"aliases":[],"args":{},"description":"Ротация собственного токена бота","examples":["Ротация токена бота — Или: бот перевыпускает собственный токен своим же токеном (скоуп `bot_self:write`). Токен, которым выполнен запрос, инвалидируется сразу — обязательно сохрани новый `access_token` из ответа, иначе бот потеряет доступ к API:\n $ pachca bots recreate-token-self"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:recreate-token-self","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bot_self:write","apiMethod":"POST","apiPath":"/bot/recreate_token","defaultColumns":["id","webhook","access_token"],"isESM":true,"relativePath":["dist","commands","bots","recreate-token-self.js"]},"bots:remove-event":{"aliases":[],"args":{"id":{"description":"Идентификатор события (pachca bots list)","name":"id","required":true}},"description":"Удаление события","examples":["Обработка событий через историю (polling) — Удали обработанное событие:\n $ pachca bots remove-event"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:remove-event","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"webhooks:events:delete","apiMethod":"DELETE","apiPath":"/webhooks/events/{id}","isESM":true,"relativePath":["dist","commands","bots","remove-event.js"]},"bots:update":{"aliases":[],"args":{"id":{"description":"Идентификатор бота (pachca bots list)","name":"id","required":true}},"description":"Редактирование бота","examples":["Обновить Webhook URL бота — Пользовательским токеном (с правом редактировать бота) — обнови URL по `id` бота. Пустая строка отключает вебхук:\n $ pachca bots update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Имя бота (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Никнейм бота. Должен заканчиваться на `_bot`. (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"outgoing-url":{"description":"URL исходящего вебхука","name":"outgoing-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"events":{"description":"События, на которые подписан бот","name":"events","hasDynamicHelp":false,"multiple":false,"type":"option"},"trigger-on":{"description":"Условие срабатывания исходящего вебхука","name":"trigger-on","hasDynamicHelp":false,"multiple":false,"type":"option"},"commands":{"description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","name":"commands","hasDynamicHelp":false,"multiple":false,"type":"option"},"scopes":{"description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.","name":"scopes","hasDynamicHelp":false,"multiple":false,"type":"option"},"template":{"description":"Шаблон форматирования входящего вебхука","name":"template","hasDynamicHelp":false,"multiple":false,"type":"option"},"template-engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","name":"template-engine","hasDynamicHelp":false,"multiple":false,"type":"option"},"challenge-key":{"description":"Название поля проверки для верификации входящего вебхука","name":"challenge-key","hasDynamicHelp":false,"multiple":false,"type":"option"},"link-preview-enabled":{"description":"Показывать превью ссылок в сообщениях входящего вебхука","name":"link-preview-enabled","allowNo":true,"type":"boolean"},"ignore-self-messages":{"description":"Игнорировать входящие сообщения, отправленные самим ботом","name":"ignore-self-messages","allowNo":true,"type":"boolean"},"events-history-enabled":{"description":"Сохранять историю событий бота для последующего получения через метод истории событий","name":"events-history-enabled","allowNo":true,"type":"boolean"},"who-can-add":{"description":"Кто может добавлять бота в чаты","name":"who-can-add","hasDynamicHelp":false,"multiple":false,"type":"option"},"can-edit":{"description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","name":"can-edit","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bots:write","apiMethod":"PUT","apiPath":"/bots/{id}","defaultColumns":["id","webhook"],"isESM":true,"relativePath":["dist","commands","bots","update.js"]},"bots:update-webhook":{"aliases":[],"args":{},"description":"Саморегистрация вебхука бота","examples":["Обновить Webhook URL бота — Или: бот сам обновляет свой webhook своим же токеном — без `id` и без участия администратора (нужен скоуп `bot_self:webhook:write`):\n $ pachca bots update-webhook"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"outgoing-url":{"description":"URL исходящего вебхука. Пустая строка отключает вебхук.","name":"outgoing-url","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"bots:update-webhook","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"bot_self:webhook:write","apiMethod":"PUT","apiPath":"/bot/webhook","defaultColumns":["id","webhook"],"requiredFlags":["outgoing-url"],"isESM":true,"relativePath":["dist","commands","bots","update-webhook.js"]},"changelog":{"aliases":[],"args":{},"description":"История изменений CLI","examples":["<%= config.bin %> changelog","<%= config.bin %> changelog -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"changelog","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","changelog.js"]},"chats:archive":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Архивация чата","examples":["Архивация и управление чатом — Архивировать чат:\n $ pachca chats archive","Найти и заархивировать неактивные чаты — Для каждого чата: архивируй:\n $ pachca chats archive"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:archive","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:archive","apiMethod":"PUT","apiPath":"/chats/{id}/archive","isESM":true,"relativePath":["dist","commands","chats","archive.js"]},"chats:create":{"aliases":[],"args":{},"description":"Новый чат","examples":["Создать канал и пригласить участников — Создай канал с участниками:\n $ pachca chats create","Создать проектную беседу из шаблона — Создай беседу с участниками из тега:\n $ pachca chats create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"member-ids":{"description":"Массив идентификаторов пользователей, которые станут участниками","name":"member-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"group-tag-ids":{"description":"Массив идентификаторов тегов, которые станут участниками","name":"group-tag-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"channel":{"description":"Является каналом","name":"channel","allowNo":true,"type":"boolean"},"public":{"description":"Открытый доступ","name":"public","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:create","apiMethod":"POST","apiPath":"/chats","defaultColumns":["id","name","created_at","owner_id","channel"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","chats","create.js"]},"chats:download-export":{"aliases":[],"args":{"id":{"description":"Идентификатор экспорта (pachca chats list)","name":"id","required":true}},"description":"Скачать архив экспорта","examples":["Экспорт истории чата — Скачай файл экспорта:\n $ pachca chats download-export"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"save":{"description":"Путь для сохранения файла","name":"save","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["common:get-exports"],"id":"chats:download-export","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_exports:read","plan":"corporation","apiMethod":"GET","apiPath":"/chats/exports/{id}","isESM":true,"relativePath":["dist","commands","chats","download-export.js"]},"chats:get":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Информация о чате","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:read","apiMethod":"GET","apiPath":"/chats/{id}","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","chats","get.js"]},"chats:list":{"aliases":[],"args":{},"description":"Список чатов","examples":["Найти активные чаты за период — Получи чаты с активностью после указанной даты:\n $ pachca chats list","Найти и заархивировать неактивные чаты — Получи чаты без активности с нужной даты:\n $ pachca chats list","Создать гостя в чат — Выбери активный чат, в который добавить гостя — узнай его ID:\n $ pachca chats list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"sort":{"description":"Поле сортировки","name":"sort","default":"id","hasDynamicHelp":false,"multiple":false,"options":["id","last_message_at"],"type":"option"},"order":{"description":"Направление сортировки","name":"order","default":"desc","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"availability":{"description":"Параметр, который отвечает за доступность и выборку чатов для пользователя","name":"availability","default":"is_member","hasDynamicHelp":false,"multiple":false,"options":["is_member","public"],"type":"option"},"last-message-at-after":{"description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-after","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-message-at-before":{"description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-before","hasDynamicHelp":false,"multiple":false,"type":"option"},"personal":{"description":"Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.","name":"personal","allowNo":true,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:read","apiMethod":"GET","apiPath":"/chats","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","chats","list.js"]},"chats:request-export":{"aliases":[],"args":{},"description":"Экспорт сообщений","examples":["Экспорт истории чата — Запроси экспорт:\n $ pachca chats request-export"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"start-at":{"description":"Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","name":"start-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"end-at":{"description":"Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","name":"end-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"webhook-url":{"description":"Адрес, на который будет отправлен вебхук по завершению экспорта","name":"webhook-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-ids":{"description":"Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.","name":"chat-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"skip-chats-file":{"description":"Пропуск формирования файла со списком чатов (chats.json)","name":"skip-chats-file","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":["common:request-export"],"id":"chats:request-export","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_exports:write","plan":"corporation","apiMethod":"POST","apiPath":"/chats/exports","requiredFlags":["start-at","end-at","webhook-url"],"isESM":true,"relativePath":["dist","commands","chats","request-export.js"]},"chats:unarchive":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Разархивация чата","examples":["Архивация и управление чатом — Разархивировать чат:\n $ pachca chats unarchive"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:unarchive","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:archive","apiMethod":"PUT","apiPath":"/chats/{id}/unarchive","isESM":true,"relativePath":["dist","commands","chats","unarchive.js"]},"chats:update":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (pachca chats list)","name":"id","required":true}},"description":"Редактирование чата","examples":["Переименовать или обновить чат — Обнови чат:\n $ pachca chats update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"public":{"description":"Открытый доступ","name":"public","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"chats:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:update","apiMethod":"PUT","apiPath":"/chats/{id}","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","chats","update.js"]},"commands":{"aliases":[],"args":{},"description":"Список всех команд","examples":["<%= config.bin %> commands","<%= config.bin %> commands --available","<%= config.bin %> commands --available -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"available":{"description":"Показать только команды, доступные текущему токену","name":"available","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"commands","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","commands.js"]},"config:get":{"aliases":[],"args":{"key":{"description":"Ключ настройки","name":"key","required":true}},"description":"Получение значения конфигурации","examples":["<%= config.bin %> config get defaults.output"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"config:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","config","get.js"]},"config:list":{"aliases":[],"args":{},"description":"Список всех настроек","examples":["<%= config.bin %> config list","<%= config.bin %> config list -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"config:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","config","list.js"]},"config:set":{"aliases":[],"args":{"key":{"description":"Ключ настройки","name":"key","required":true},"value":{"description":"Значение настройки","name":"value","required":true}},"description":"Установка значения конфигурации","examples":["<%= config.bin %> config set defaults.output json","<%= config.bin %> config set defaults.timeout 60"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"config:set","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","config","set.js"]},"custom-properties:list":{"aliases":[],"args":{},"description":"Список дополнительных полей","examples":["Получить кастомные поля профиля — Получи список дополнительных полей для сотрудников:\n $ pachca custom-properties list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"entity-type":{"description":"Тип сущности","name":"entity-type","hasDynamicHelp":false,"multiple":false,"options":["User","Task"],"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["common:custom-properties"],"id":"custom-properties:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"custom_properties:read","apiMethod":"GET","apiPath":"/custom_properties","defaultColumns":["id","name","data_type"],"requiredFlags":["entity-type"],"isESM":true,"relativePath":["dist","commands","custom-properties","list.js"]},"doctor":{"aliases":[],"args":{},"description":"Диагностика окружения: Node.js, сеть, токен, конфигурация","examples":["<%= config.bin %> doctor","<%= config.bin %> doctor -o json"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"doctor","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","doctor.js"]},"files:direct-url":{"aliases":[],"args":{},"description":"Загрузка файла","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"direct-url":{"description":"URL для отправки запроса (получается из ответа POST /uploads)","name":"direct-url","required":true,"hasDynamicHelp":false,"multiple":false,"type":"option"},"content-disposition":{"description":"Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"content-disposition","hasDynamicHelp":false,"multiple":false,"type":"option"},"acl":{"description":"Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"acl","hasDynamicHelp":false,"multiple":false,"type":"option"},"policy":{"description":"Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"policy","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-credential":{"description":"Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-credential","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-algorithm":{"description":"Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-algorithm","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-date":{"description":"Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-date","hasDynamicHelp":false,"multiple":false,"type":"option"},"x-amz-signature":{"description":"Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"x-amz-signature","hasDynamicHelp":false,"multiple":false,"type":"option"},"key":{"description":"Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)","name":"key","hasDynamicHelp":false,"multiple":false,"type":"option"},"file":{"description":"Файл для загрузки","name":"file","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["common:direct-url"],"id":"files:direct-url","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"apiMethod":"POST","apiPath":"/direct_url","requiredFlags":["content-disposition","acl","policy","x-amz-credential","x-amz-algorithm","x-amz-date","x-amz-signature","key"],"isESM":true,"relativePath":["dist","commands","files","direct-url.js"]},"files:uploads":{"aliases":[],"args":{},"description":"Получение подписи, ключа и других параметров","examples":["Изменить вложения сообщения — Если нужно добавить новый файл — загрузи его:\n $ pachca files uploads"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":["common:uploads"],"id":"files:uploads","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"uploads:write","apiMethod":"POST","apiPath":"/uploads","defaultColumns":["Content-Disposition","acl","policy","x-amz-credential","x-amz-algorithm"],"isESM":true,"relativePath":["dist","commands","files","uploads.js"]},"group-tags:create":{"aliases":[],"args":{},"description":"Новый тег","examples":["Массовое создание сотрудников с тегами — Создай тег (если нужен):\n $ pachca group-tags create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название тега (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:write","apiMethod":"POST","apiPath":"/group_tags","defaultColumns":["id","name","users_count"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","group-tags","create.js"]},"group-tags:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Удаление тега","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:write","apiMethod":"DELETE","apiPath":"/group_tags/{id}","isESM":true,"relativePath":["dist","commands","group-tags","delete.js"]},"group-tags:get":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Информация о теге","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:read","apiMethod":"GET","apiPath":"/group_tags/{id}","defaultColumns":["id","name","users_count"],"isESM":true,"relativePath":["dist","commands","group-tags","get.js"]},"group-tags:list":{"aliases":[],"args":{},"description":"Список тегов сотрудников","examples":["Получить всех сотрудников тега/департамента — Найди тег по названию, возьми `id`:\n $ pachca group-tags list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"names":{"description":"Массив названий тегов, по которым вы хотите отфильтровать список (через запятую)","name":"names","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:read","apiMethod":"GET","apiPath":"/group_tags","defaultColumns":["id","name","users_count"],"isESM":true,"relativePath":["dist","commands","group-tags","list.js"]},"group-tags:list-users":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Список сотрудников тега","examples":["Получить всех сотрудников тега/департамента — Получи всех участников тега:\n $ pachca group-tags list-users"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:list-users","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:read","apiMethod":"GET","apiPath":"/group_tags/{id}/users","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","group-tags","list-users.js"]},"group-tags:update":{"aliases":[],"args":{"id":{"description":"Идентификатор тега","name":"id","required":true}},"description":"Редактирование тега","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"name":{"description":"Название тега (макс. 255 символов)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"group-tags:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"group_tags:write","apiMethod":"PUT","apiPath":"/group_tags/{id}","defaultColumns":["id","name","users_count"],"requiredFlags":["name"],"isESM":true,"relativePath":["dist","commands","group-tags","update.js"]},"guide":{"aliases":[],"args":{"query":{"description":"Поисковый запрос","name":"query","required":false}},"description":"Поиск сценариев использования","examples":["<%= config.bin %> guide \"отправить файл\"","<%= config.bin %> guide \"создать бота\"","<%= config.bin %> guide"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"guide","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","guide.js"]},"introspect":{"aliases":[],"args":{"command":{"description":"Имя команды (например, \"messages create\")","name":"command","required":false}},"description":"Метаданные команды в машиночитаемом формате","examples":["<%= config.bin %> introspect messages create","<%= config.bin %> introspect"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"introspect","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":false,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","introspect.js"]},"members:add":{"aliases":[],"args":{"id":{"description":"Идентификатор чата (беседа, канал или чат треда)","name":"id","required":true}},"description":"Добавление пользователей","examples":["Подписаться на тред сообщения — Добавь бота в участники чата треда:\n $ pachca members add","Создать канал и пригласить участников — Или добавь участников позже:\n $ pachca members add","Онбординг нового сотрудника — Добавь в нужные каналы:\n $ pachca members add"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"member-ids":{"description":"Массив идентификаторов пользователей, которые станут участниками","name":"member-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"silent":{"description":"Не создавать в чате системное сообщение о добавлении участника","name":"silent","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:add","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"POST","apiPath":"/chats/{id}/members","requiredFlags":["member-ids"],"isESM":true,"relativePath":["dist","commands","members","add.js"]},"members:add-group-tags":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true}},"description":"Добавление тегов","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"group-tag-ids":{"description":"Массив идентификаторов тегов, которые станут участниками","name":"group-tag-ids","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:add-group-tags","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"POST","apiPath":"/chats/{id}/group_tags","requiredFlags":["group-tag-ids"],"isESM":true,"relativePath":["dist","commands","members","add-group-tags.js"]},"members:leave":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true}},"description":"Выход из беседы или канала","examples":["Архивация и управление чатом — Покинуть чат:\n $ pachca members leave"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:leave","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chats:leave","apiMethod":"DELETE","apiPath":"/chats/{id}/leave","isESM":true,"relativePath":["dist","commands","members","leave.js"]},"members:list":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true}},"description":"Список участников чата","examples":["Упомянуть пользователя — Ищи среди участников целевого чата:\n $ pachca members list","Упомянуть пользователя — Если пишешь в тред: также проверь участников родительского чата:\n $ pachca members list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"role":{"description":"Роль в чате","name":"role","default":"all","hasDynamicHelp":false,"multiple":false,"options":["all","owner","admin","editor","member"],"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:read","apiMethod":"GET","apiPath":"/chats/{id}/members","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","members","list.js"]},"members:remove":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true},"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Исключение пользователя","examples":["Архивация и управление чатом — Удалить участника:\n $ pachca members remove"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:remove","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"DELETE","apiPath":"/chats/{id}/members/{user_id}","isESM":true,"relativePath":["dist","commands","members","remove.js"]},"members:remove-group-tag":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true},"tag_id":{"description":"Идентификатор тега (pachca tags list)","name":"tag_id","required":true}},"description":"Исключение тега","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:remove-group-tag","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"DELETE","apiPath":"/chats/{id}/group_tags/{tag_id}","isESM":true,"relativePath":["dist","commands","members","remove-group-tag.js"]},"members:update":{"aliases":[],"args":{"id":{"description":"Идентификатор чата","name":"id","required":true},"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Редактирование роли","examples":["Архивация и управление чатом — Изменить роль участника:\n $ pachca members update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"role":{"description":"Роль","name":"role","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"members:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"chat_members:write","apiMethod":"PUT","apiPath":"/chats/{id}/members/{user_id}","requiredFlags":["role"],"isESM":true,"relativePath":["dist","commands","members","update.js"]},"messages:create":{"aliases":[],"args":{},"description":"Новое сообщение","examples":["Найти чат по имени и отправить сообщение — Отправь сообщение в найденный чат:\n $ pachca messages create","Отправить сообщение в канал или беседу (если chat_id известен) — Отправь сообщение в чат:\n $ pachca messages create","Отправить личное сообщение пользователю — Отправь личное сообщение:\n $ pachca messages create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"entity-type":{"description":"Тип сущности","name":"entity-type","hasDynamicHelp":false,"multiple":false,"type":"option"},"entity-id":{"description":"Идентификатор сущности (pachca chats list | pachca users list)","name":"entity-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"content":{"description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"files":{"description":"Прикрепляемые файлы","name":"files","hasDynamicHelp":false,"multiple":false,"type":"option"},"buttons":{"description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.","name":"buttons","hasDynamicHelp":false,"multiple":false,"type":"option"},"parent-message-id":{"description":"Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.","name":"parent-message-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-avatar-url":{"description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. (макс. 255 символов)","name":"display-avatar-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-name":{"description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. (макс. 255 символов)","name":"display-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"skip-invite-mentions":{"description":"Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.","name":"skip-invite-mentions","allowNo":true,"type":"boolean"},"link-preview":{"description":"Отображение предпросмотра первой найденной ссылки в тексте сообщения","name":"link-preview","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:create","apiMethod":"POST","apiPath":"/messages","defaultColumns":["id","content","created_at","entity_type","entity_id"],"requiredFlags":["entity-id","content"],"isESM":true,"relativePath":["dist","commands","messages","create.js"]},"messages:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Удаление сообщения","examples":["Удалить сообщение — Удали сообщение:\n $ pachca messages delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:delete","apiMethod":"DELETE","apiPath":"/messages/{id}","isESM":true,"relativePath":["dist","commands","messages","delete.js"]},"messages:get":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Информация о сообщении","examples":["Получить вложения из сообщения — Получи сообщение — в `files[]` каждый объект содержит `url`, `name`, `file_type`, `size`:\n $ pachca messages get","Изменить вложения сообщения — Получи текущие вложения из `files[]`:\n $ pachca messages get","Обработать входящий вебхук-событие — Для полной информации запроси сообщение — особенно для вложений (`files[]`):\n $ pachca messages get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:read","apiMethod":"GET","apiPath":"/messages/{id}","defaultColumns":["id","content","created_at","entity_type","entity_id"],"isESM":true,"relativePath":["dist","commands","messages","get.js"]},"messages:list":{"aliases":[],"args":{"chat_id":{"description":"Идентификатор чата (беседа, канал, диалог или чат треда)","name":"chat_id","required":false}},"description":"Список сообщений чата","examples":["Получить историю сообщений чата — Получи сообщения чата с пагинацией:\n $ pachca messages list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"chat-id":{"description":"Идентификатор чата (беседа, канал, диалог или чат треда)","name":"chat-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"sort":{"description":"Поле сортировки","name":"sort","default":"id","hasDynamicHelp":false,"multiple":false,"options":["id"],"type":"option"},"order":{"description":"Направление сортировки","name":"order","default":"desc","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:read","apiMethod":"GET","apiPath":"/messages","defaultColumns":["id","content","created_at","entity_type","entity_id"],"requiredFlags":["chat-id"],"isESM":true,"relativePath":["dist","commands","messages","list.js"]},"messages:pin":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Закрепление сообщения","examples":["Закрепить/открепить сообщение — Закрепить сообщение:\n $ pachca messages pin"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:pin","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"pins:write","apiMethod":"POST","apiPath":"/messages/{id}/pin","isESM":true,"relativePath":["dist","commands","messages","pin.js"]},"messages:unfurl":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Unfurl (разворачивание ссылок)","examples":["Разворачивание ссылок (unfurling) — Отправь превью-данные:\n $ pachca messages unfurl"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"link-previews":{"description":"`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении","name":"link-previews","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":["link-previews:add"],"id":"messages:unfurl","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"link_previews:write","apiMethod":"POST","apiPath":"/messages/{id}/link_previews","requiredFlags":["link-previews"],"isESM":true,"relativePath":["dist","commands","messages","unfurl.js"]},"messages:unpin":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Открепление сообщения","examples":["Закрепить/открепить сообщение — Открепить сообщение:\n $ pachca messages unpin"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:unpin","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"pins:write","apiMethod":"DELETE","apiPath":"/messages/{id}/pin","isESM":true,"relativePath":["dist","commands","messages","unpin.js"]},"messages:update":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения (pachca messages list)","name":"id","required":true}},"description":"Редактирование сообщения","examples":["Отредактировать сообщение — Обнови сообщение:\n $ pachca messages update","Изменить вложения сообщения — Обнови сообщение с новым массивом `files`:\n $ pachca messages update","Обработать нажатие кнопки (callback) — Опционально: обнови исходное сообщение:\n $ pachca messages update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"content":{"description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"files":{"description":"Прикрепляемые файлы","name":"files","hasDynamicHelp":false,"multiple":false,"type":"option"},"buttons":{"description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.","name":"buttons","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-avatar-url":{"description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","name":"display-avatar-url","hasDynamicHelp":false,"multiple":false,"type":"option"},"display-name":{"description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","name":"display-name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"messages:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:update","apiMethod":"PUT","apiPath":"/messages/{id}","defaultColumns":["id","content","created_at","entity_type","entity_id"],"isESM":true,"relativePath":["dist","commands","messages","update.js"]},"oauth:token-info":{"aliases":[],"args":{},"description":"Информация о токене","examples":["Проверить свой токен — Получи информацию о токене: скоупы, дату создания, срок жизни:\n $ pachca oauth token-info"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":["profile:get-info"],"id":"oauth:token-info","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"apiMethod":"GET","apiPath":"/oauth/token/info","defaultColumns":["id","name","created_at","token","user_id"],"isESM":true,"relativePath":["dist","commands","oauth","token-info.js"]},"profile:delete-avatar":{"aliases":[],"args":{},"description":"Удаление своего аватара","examples":["Удалить аватар профиля — Удали аватар:\n $ pachca profile delete-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:delete-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_avatar:write","apiMethod":"DELETE","apiPath":"/profile/avatar","isESM":true,"relativePath":["dist","commands","profile","delete-avatar.js"]},"profile:delete-status":{"aliases":[],"args":{},"description":"Удаление своего статуса","examples":["Сбросить статус — Удали статус:\n $ pachca profile delete-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:delete-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_status:write","apiMethod":"DELETE","apiPath":"/profile/status","isESM":true,"relativePath":["dist","commands","profile","delete-status.js"]},"profile:get":{"aliases":[],"args":{},"description":"Свой профиль","examples":["Получить свой профиль — Получи информацию о текущем пользователе:\n $ pachca profile get","Получить кастомные поля профиля — Получи профиль — в `custom_properties` содержатся значения полей:\n $ pachca profile get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile:read","apiMethod":"GET","apiPath":"/profile","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","profile","get.js"]},"profile:get-status":{"aliases":[],"args":{},"description":"Свой статус","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:get-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_status:read","apiMethod":"GET","apiPath":"/profile/status","defaultColumns":["title","emoji","expires_at","is_away"],"isESM":true,"relativePath":["dist","commands","profile","get-status.js"]},"profile:update-avatar":{"aliases":[],"args":{},"description":"Загрузка своего аватара","examples":["Загрузить аватар профиля — Загрузи аватар из файла:\n $ pachca profile update-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"file":{"description":"Файл изображения для аватара","name":"file","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:update-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_avatar:write","apiMethod":"PUT","apiPath":"/profile/avatar","defaultColumns":["image_url"],"isESM":true,"relativePath":["dist","commands","profile","update-avatar.js"]},"profile:update-status":{"aliases":[],"args":{},"description":"Новый свой статус","examples":["Установить статус — Установи статус:\n $ pachca profile update-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"emoji":{"description":"Emoji символ статуса","name":"emoji","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Текст статуса (макс. 50 символов)","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"expires-at":{"description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","name":"expires-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"is-away":{"description":"Режим «Нет на месте»","name":"is-away","allowNo":true,"type":"boolean"},"away-message":{"description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. (макс. 1024 символов)","name":"away-message","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"profile:update-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"profile_status:write","apiMethod":"PUT","apiPath":"/profile/status","defaultColumns":["title","emoji","expires_at","is_away"],"requiredFlags":["emoji","title"],"isESM":true,"relativePath":["dist","commands","profile","update-status.js"]},"reactions:add":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Добавление реакции","examples":["Добавить реакцию на сообщение — Добавь реакцию:\n $ pachca reactions add"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"code":{"description":"Emoji символ реакции","name":"code","hasDynamicHelp":false,"multiple":false,"type":"option"},"name":{"description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"reactions:add","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"reactions:write","apiMethod":"POST","apiPath":"/messages/{id}/reactions","defaultColumns":["name","created_at","user_id","code"],"requiredFlags":["code"],"isESM":true,"relativePath":["dist","commands","reactions","add.js"]},"reactions:list":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Список реакций","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"reactions:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"reactions:read","apiMethod":"GET","apiPath":"/messages/{id}/reactions","defaultColumns":["name","created_at","user_id","code"],"isESM":true,"relativePath":["dist","commands","reactions","list.js"]},"reactions:remove":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Удаление реакции","examples":["Добавить реакцию на сообщение — Убрать реакцию:\n $ pachca reactions remove"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"code":{"description":"Emoji символ реакции","name":"code","hasDynamicHelp":false,"multiple":false,"type":"option"},"name":{"description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","name":"name","hasDynamicHelp":false,"multiple":false,"type":"option"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"reactions:remove","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"reactions:write","apiMethod":"DELETE","apiPath":"/messages/{id}/reactions","requiredFlags":["code"],"isESM":true,"relativePath":["dist","commands","reactions","remove.js"]},"read-member:list-readers":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Список прочитавших сообщение","examples":["Проверить, кто прочитал сообщение — Получи массив `user_id` прочитавших:\n $ pachca read-member list-readers"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"read-member:list-readers","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"messages:read","apiMethod":"GET","apiPath":"/messages/{id}/read_member_ids","isESM":true,"relativePath":["dist","commands","read-member","list-readers.js"]},"search:list-chats":{"aliases":[],"args":{},"description":"Поиск чатов","examples":["Найти чат по имени и отправить сообщение — Найди чат по названию через поиск:\n $ pachca search list-chats","Найти чат по названию — Полнотекстовый поиск по чатам:\n $ pachca search list-chats"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Текст поискового запроса","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"order":{"description":"Направление сортировки","name":"order","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"created-from":{"description":"Фильтр по дате создания (от)","name":"created-from","hasDynamicHelp":false,"multiple":false,"type":"option"},"created-to":{"description":"Фильтр по дате создания (до)","name":"created-to","hasDynamicHelp":false,"multiple":false,"type":"option"},"active":{"description":"Фильтр по активности чата","name":"active","allowNo":true,"type":"boolean"},"chat-subtype":{"description":"Фильтр по типу чата","name":"chat-subtype","hasDynamicHelp":false,"multiple":false,"options":["discussion","thread"],"type":"option"},"personal":{"description":"Фильтр по личным чатам","name":"personal","allowNo":true,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"search:list-chats","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"search:chats","apiMethod":"GET","apiPath":"/search/chats","defaultColumns":["id","name","created_at","owner_id","channel"],"isESM":true,"relativePath":["dist","commands","search","list-chats.js"]},"search:list-messages":{"aliases":[],"args":{},"description":"Поиск сообщений","examples":["Найти сообщение по тексту — Полнотекстовый поиск по сообщениям:\n $ pachca search list-messages"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Текст поискового запроса","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"order":{"description":"Направление сортировки","name":"order","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"sort":{"description":"Сортировка результатов","name":"sort","default":"created_at","hasDynamicHelp":false,"multiple":false,"options":["created_at","relevance"],"type":"option"},"created-from":{"description":"Фильтр по дате создания (от)","name":"created-from","hasDynamicHelp":false,"multiple":false,"type":"option"},"created-to":{"description":"Фильтр по дате создания (до)","name":"created-to","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-ids":{"description":"Фильтр по ID чатов (через запятую)","name":"chat-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"user-ids":{"description":"Фильтр по ID авторов сообщений (через запятую)","name":"user-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"active":{"description":"Фильтр по активности чата","name":"active","allowNo":true,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"search:list-messages","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"search:messages","apiMethod":"GET","apiPath":"/search/messages","defaultColumns":["id","content","created_at","entity_type","entity_id"],"isESM":true,"relativePath":["dist","commands","search","list-messages.js"]},"search:list-users":{"aliases":[],"args":{},"description":"Поиск сотрудников","examples":["Отправить личное сообщение пользователю — Определи `user_id` получателя:\n $ pachca search list-users","Упомянуть пользователя — Не нашёл — ищи по всей компании:\n $ pachca search list-users","Найти сотрудника по имени — Полнотекстовый поиск по сотрудникам:\n $ pachca search list-users"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Текст поискового запроса","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"sort":{"description":"Сортировка результатов","name":"sort","hasDynamicHelp":false,"multiple":false,"options":["by_score","alphabetical","creation"],"type":"option"},"order":{"description":"Направление сортировки","name":"order","hasDynamicHelp":false,"multiple":false,"options":["asc","desc"],"type":"option"},"created-from":{"description":"Фильтр по дате создания (от)","name":"created-from","hasDynamicHelp":false,"multiple":false,"type":"option"},"created-to":{"description":"Фильтр по дате создания (до)","name":"created-to","hasDynamicHelp":false,"multiple":false,"type":"option"},"company-roles":{"description":"Фильтр по ролям сотрудников (через запятую)","name":"company-roles","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"search:list-users","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"search:users","apiMethod":"GET","apiPath":"/search/users","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","search","list-users.js"]},"security:list":{"aliases":[],"args":{},"description":"Журнал аудита событий","examples":["Получить журнал аудита событий — Получи журнал аудита:\n $ pachca security list","Мониторинг подозрительных входов — Получи события неудачных 2FA за период:\n $ pachca security list","Экспорт логов за период — Получи все события за период с пагинацией:\n $ pachca security list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"start-time":{"description":"Начальная метка времени (включительно)","name":"start-time","hasDynamicHelp":false,"multiple":false,"type":"option"},"end-time":{"description":"Конечная метка времени (включительно)","name":"end-time","hasDynamicHelp":false,"multiple":false,"type":"option"},"event-key":{"description":"Фильтр по конкретному типу события","name":"event-key","hasDynamicHelp":false,"multiple":false,"options":["user_login","user_logout","user_2fa_fail","user_2fa_success","user_created","user_deleted","user_role_changed","user_updated","tag_created","tag_deleted","user_added_to_tag","user_removed_from_tag","chat_created","chat_renamed","chat_permission_changed","user_chat_join","user_chat_leave","tag_added_to_chat","tag_removed_from_chat","message_updated","message_deleted","message_created","reaction_created","reaction_deleted","thread_created","access_token_created","access_token_updated","access_token_destroy","kms_encrypt","kms_decrypt","audit_events_accessed","dlp_violation_detected","search_users_api","search_chats_api","search_messages_api","bot_scopes_updated","bot_webhook_settings_updated","bot_token_recreated","bot_deleted","video_call_started","video_call_finished","video_call_recording_ready"],"type":"option"},"actor-id":{"description":"Идентификатор пользователя, выполнившего действие","name":"actor-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"actor-type":{"description":"Тип актора","name":"actor-type","hasDynamicHelp":false,"multiple":false,"type":"option"},"entity-id":{"description":"Идентификатор затронутой сущности","name":"entity-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"entity-type":{"description":"Тип сущности","name":"entity-type","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"security:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"audit_events:read","plan":"corporation","apiMethod":"GET","apiPath":"/audit_events","defaultColumns":["id","created_at","event_key","entity_id","entity_type"],"isESM":true,"relativePath":["dist","commands","security","list.js"]},"tasks:create":{"aliases":[],"args":{},"description":"Новое напоминание","examples":["Форма заявки/запроса — При submit: создай задачу или отправь уведомление ответственному:\n $ pachca tasks create","Создать напоминание — Создай задачу:\n $ pachca tasks create","Создать серию напоминаний — Для каждой даты: создай задачу:\n $ pachca tasks create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"kind":{"description":"Тип","name":"kind","hasDynamicHelp":false,"multiple":false,"type":"option"},"content":{"description":"Описание (по умолчанию — название типа)","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"due-at":{"description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","name":"due-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"priority":{"description":"Приоритет: 1, 2 (важно) или 3 (очень важно)","name":"priority","hasDynamicHelp":false,"multiple":false,"type":"option"},"performer-ids":{"description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)","name":"performer-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-id":{"description":"Идентификатор чата, к которому привязывается напоминание (pachca chats list)","name":"chat-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"all-day":{"description":"Напоминание на весь день (без указания времени)","name":"all-day","allowNo":true,"type":"boolean"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:create","apiMethod":"POST","apiPath":"/tasks","defaultColumns":["id","content","created_at","kind","due_at"],"requiredFlags":["kind"],"isESM":true,"relativePath":["dist","commands","tasks","create.js"]},"tasks:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор напоминания (pachca tasks list)","name":"id","required":true}},"description":"Удаление напоминания","examples":["Удалить задачу — Удали задачу:\n $ pachca tasks delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:delete","apiMethod":"DELETE","apiPath":"/tasks/{id}","isESM":true,"relativePath":["dist","commands","tasks","delete.js"]},"tasks:get":{"aliases":[],"args":{"id":{"description":"Идентификатор напоминания (pachca tasks list)","name":"id","required":true}},"description":"Информация о напоминании","examples":["Получить задачу по ID — Получи информацию о задаче:\n $ pachca tasks get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:read","apiMethod":"GET","apiPath":"/tasks/{id}","defaultColumns":["id","content","created_at","kind","due_at"],"isESM":true,"relativePath":["dist","commands","tasks","get.js"]},"tasks:list":{"aliases":[],"args":{},"description":"Список напоминаний","examples":["Получить список предстоящих задач — Получи все задачи, фильтруй по `status` на клиенте:\n $ pachca tasks list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:read","apiMethod":"GET","apiPath":"/tasks","defaultColumns":["id","content","created_at","kind","due_at"],"isESM":true,"relativePath":["dist","commands","tasks","list.js"]},"tasks:update":{"aliases":[],"args":{"id":{"description":"Идентификатор напоминания (pachca tasks list)","name":"id","required":true}},"description":"Редактирование напоминания","examples":["Отметить задачу выполненной — Обнови статус задачи:\n $ pachca tasks update","Обновить задачу (перенести срок, сменить ответственных) — Обнови нужные поля задачи:\n $ pachca tasks update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"kind":{"description":"Тип","name":"kind","hasDynamicHelp":false,"multiple":false,"type":"option"},"content":{"description":"Описание","name":"content","hasDynamicHelp":false,"multiple":false,"type":"option"},"due-at":{"description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","name":"due-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"priority":{"description":"Приоритет: 1, 2 (важно) или 3 (очень важно)","name":"priority","hasDynamicHelp":false,"multiple":false,"type":"option"},"performer-ids":{"description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»","name":"performer-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"status":{"description":"Статус","name":"status","hasDynamicHelp":false,"multiple":false,"type":"option"},"all-day":{"description":"Напоминание на весь день (без указания времени)","name":"all-day","allowNo":true,"type":"boolean"},"done-at":{"description":"Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","name":"done-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"tasks:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"tasks:update","apiMethod":"PUT","apiPath":"/tasks/{id}","defaultColumns":["id","content","created_at","kind","due_at"],"isESM":true,"relativePath":["dist","commands","tasks","update.js"]},"threads:add":{"aliases":[],"args":{"id":{"description":"Идентификатор сообщения","name":"id","required":true}},"description":"Новый тред","examples":["Ответить в тред (комментарий к сообщению) — Получи или создай тред, возьми `thread.id` из ответа:\n $ pachca threads add","Подписаться на тред сообщения — Получи или создай тред, возьми `chat_id` из ответа:\n $ pachca threads add"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:add","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:create","apiMethod":"POST","apiPath":"/messages/{id}/thread","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","add.js"]},"threads:create":{"aliases":[],"args":{},"description":"Новый самостоятельный тред","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:create","apiMethod":"POST","apiPath":"/threads","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","create.js"]},"threads:get":{"aliases":[],"args":{"id":{"description":"Идентификатор треда","name":"id","required":true}},"description":"Информация о треде","flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:read","apiMethod":"GET","apiPath":"/threads/{id}","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","get.js"]},"threads:list":{"aliases":[],"args":{},"description":"Список тредов","examples":["Получить список активных тредов за период — Запроси список тредов с фильтром по времени последнего сообщения и нужным `--limit`:\n $ pachca threads list","Получить список активных тредов за период — Если в ответе `meta.paginate.next_page` — пройди по страницам через `--cursor`:\n $ pachca threads list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"last-message-at-after":{"description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-after","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-message-at-before":{"description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","name":"last-message-at-before","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"threads:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"threads:read","apiMethod":"GET","apiPath":"/threads","defaultColumns":["id","chat_id","message_id","message_chat_id","updated_at"],"isESM":true,"relativePath":["dist","commands","threads","list.js"]},"upgrade":{"aliases":[],"args":{},"description":"Обновить CLI до последней версии","examples":["<%= config.bin %> upgrade"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"upgrade","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","upgrade.js"]},"upload":{"aliases":[],"args":{"file":{"description":"Путь к файлу или - для stdin","name":"file","required":true}},"description":"Загрузить файл (получает подпись и загружает автоматически)","examples":["<%= config.bin %> upload photo.jpg","cat data.csv | <%= config.bin %> upload -"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"upload","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"uploads:write","isESM":true,"relativePath":["dist","commands","upload.js"]},"users:create":{"aliases":[],"args":{},"description":"Новый сотрудник","examples":["Массовое создание сотрудников с тегами — Для каждого сотрудника: создай аккаунт с тегами:\n $ pachca users create","Создать гостя в чат — Создай гостя: роль `guest` и ровно один чат в `--chat-ids`:\n $ pachca users create","Онбординг нового сотрудника — Создай аккаунт:\n $ pachca users create"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"first-name":{"description":"Имя (макс. 255 символов)","name":"first-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-name":{"description":"Фамилия (макс. 255 символов)","name":"last-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"email":{"description":"Электронная почта (макс. 255 символов)","name":"email","hasDynamicHelp":false,"multiple":false,"type":"option"},"phone-number":{"description":"Телефон (макс. 255 символов)","name":"phone-number","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Имя пользователя (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"department":{"description":"Департамент (макс. 255 символов)","name":"department","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Должность","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"role":{"description":"Уровень доступа","name":"role","hasDynamicHelp":false,"multiple":false,"type":"option"},"suspended":{"description":"Деактивация пользователя","name":"suspended","allowNo":true,"type":"boolean"},"list-tags":{"description":"Массив тегов, привязываемых к сотруднику","name":"list-tags","hasDynamicHelp":false,"multiple":false,"type":"option"},"chat-ids":{"description":"Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.","name":"chat-ids","hasDynamicHelp":false,"multiple":false,"type":"option"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"},"skip-email-notify":{"description":"Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.","name":"skip-email-notify","allowNo":true,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:create","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:create","apiMethod":"POST","apiPath":"/users","defaultColumns":["id","title","first_name","last_name","email"],"requiredFlags":["email"],"isESM":true,"relativePath":["dist","commands","users","create.js"]},"users:delete":{"aliases":[],"args":{"id":{"description":"Идентификатор пользователя (pachca users list)","name":"id","required":true}},"description":"Удаление сотрудника","examples":["Offboarding сотрудника — Опционально: удалить аккаунт полностью:\n $ pachca users delete"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:delete","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:delete","apiMethod":"DELETE","apiPath":"/users/{id}","isESM":true,"relativePath":["dist","commands","users","delete.js"]},"users:get":{"aliases":[],"args":{"id":{"description":"Идентификатор пользователя (pachca users list)","name":"id","required":true}},"description":"Информация о сотруднике","examples":["Получить сотрудника по ID — Получи информацию о сотруднике:\n $ pachca users get"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:get","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:read","apiMethod":"GET","apiPath":"/users/{id}","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","users","get.js"]},"users:get-status":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Статус сотрудника","examples":["Управление статусом сотрудника — Получить текущий статус:\n $ pachca users get-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:get-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_status:read","apiMethod":"GET","apiPath":"/users/{user_id}/status","defaultColumns":["title","emoji","expires_at","is_away"],"isESM":true,"relativePath":["dist","commands","users","get-status.js"]},"users:list":{"aliases":[],"args":{},"description":"Список сотрудников","examples":["Проверить, кто прочитал сообщение — При необходимости сопоставь с именами сотрудников:\n $ pachca users list","Разослать уведомление нескольким пользователям — Определи список `user_id` получателей:\n $ pachca users list","Найти сотрудника по имени или email — Поиск по имени/email (частичное совпадение):\n $ pachca users list"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"query":{"description":"Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).","name":"query","hasDynamicHelp":false,"multiple":false,"type":"option"},"limit":{"description":"Количество результатов на страницу","name":"limit","hasDynamicHelp":false,"multiple":false,"type":"option"},"cursor":{"description":"Курсор для следующей страницы","name":"cursor","hasDynamicHelp":false,"multiple":false,"type":"option"},"all":{"description":"Загрузить все страницы автоматически","name":"all","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:list","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:read","apiMethod":"GET","apiPath":"/users","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","users","list.js"]},"users:remove-avatar":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Удаление аватара сотрудника","examples":["Удалить аватар сотрудника — Удали аватар сотрудника:\n $ pachca users remove-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:remove-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_avatar:write","apiMethod":"DELETE","apiPath":"/users/{user_id}/avatar","isESM":true,"relativePath":["dist","commands","users","remove-avatar.js"]},"users:remove-status":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Удаление статуса сотрудника","examples":["Управление статусом сотрудника — Удалить статус:\n $ pachca users remove-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"force":{"description":"Пропустить подтверждение","name":"force","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:remove-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_status:write","apiMethod":"DELETE","apiPath":"/users/{user_id}/status","isESM":true,"relativePath":["dist","commands","users","remove-status.js"]},"users:update":{"aliases":[],"args":{"id":{"description":"Идентификатор пользователя (pachca users list)","name":"id","required":true}},"description":"Редактирование сотрудника","examples":["Массовое создание сотрудников с тегами — Или обнови существующего:\n $ pachca users update","Offboarding сотрудника — Заблокировать доступ:\n $ pachca users update"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"first-name":{"description":"Имя (макс. 255 символов)","name":"first-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"last-name":{"description":"Фамилия (макс. 255 символов)","name":"last-name","hasDynamicHelp":false,"multiple":false,"type":"option"},"email":{"description":"Электронная почта (макс. 255 символов)","name":"email","hasDynamicHelp":false,"multiple":false,"type":"option"},"phone-number":{"description":"Телефон (макс. 255 символов)","name":"phone-number","hasDynamicHelp":false,"multiple":false,"type":"option"},"nickname":{"description":"Имя пользователя (макс. 255 символов)","name":"nickname","hasDynamicHelp":false,"multiple":false,"type":"option"},"department":{"description":"Департамент (макс. 255 символов)","name":"department","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Должность","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"role":{"description":"Уровень доступа","name":"role","hasDynamicHelp":false,"multiple":false,"type":"option"},"suspended":{"description":"Деактивация пользователя","name":"suspended","allowNo":true,"type":"boolean"},"list-tags":{"description":"Массив тегов, привязываемых к сотруднику","name":"list-tags","hasDynamicHelp":false,"multiple":false,"type":"option"},"custom-properties":{"description":"Задаваемые дополнительные поля","name":"custom-properties","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:update","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"users:update","apiMethod":"PUT","apiPath":"/users/{id}","defaultColumns":["id","title","first_name","last_name","email"],"isESM":true,"relativePath":["dist","commands","users","update.js"]},"users:update-avatar":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Загрузка аватара сотрудника","examples":["Загрузить аватар сотрудника — Загрузи аватар сотруднику:\n $ pachca users update-avatar"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"file":{"description":"Файл изображения для аватара","name":"file","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:update-avatar","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_avatar:write","apiMethod":"PUT","apiPath":"/users/{user_id}/avatar","defaultColumns":["image_url"],"isESM":true,"relativePath":["dist","commands","users","update-avatar.js"]},"users:update-status":{"aliases":[],"args":{"user_id":{"description":"Идентификатор пользователя (pachca users list)","name":"user_id","required":true}},"description":"Новый статус сотрудника","examples":["Управление статусом сотрудника — Установить статус:\n $ pachca users update-status"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"emoji":{"description":"Emoji символ статуса","name":"emoji","hasDynamicHelp":false,"multiple":false,"type":"option"},"title":{"description":"Текст статуса (макс. 50 символов)","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"expires-at":{"description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","name":"expires-at","hasDynamicHelp":false,"multiple":false,"type":"option"},"is-away":{"description":"Режим «Нет на месте»","name":"is-away","allowNo":true,"type":"boolean"},"away-message":{"description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. (макс. 1024 символов)","name":"away-message","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"users:update-status","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"user_status:write","apiMethod":"PUT","apiPath":"/users/{user_id}/status","defaultColumns":["title","emoji","expires_at","is_away"],"requiredFlags":["emoji","title"],"isESM":true,"relativePath":["dist","commands","users","update-status.js"]},"version":{"aliases":[],"args":{},"description":"Версия CLI","examples":["<%= config.bin %> version"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"version","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"isESM":true,"relativePath":["dist","commands","version.js"]},"views:open":{"aliases":[],"args":{},"description":"Открытие представления","examples":["Показать интерактивную форму пользователю — Немедленно открой форму:\n $ pachca views open","Опрос сотрудников через форму — Открой форму с полями опроса:\n $ pachca views open","Форма заявки/запроса — При нажатии открой форму с полями: тема, описание, приоритет:\n $ pachca views open"],"flags":{"output":{"char":"o","description":"Output format: table, json, yaml, csv","name":"output","hasDynamicHelp":false,"multiple":false,"options":["table","json","yaml","csv"],"type":"option"},"columns":{"char":"c","description":"Columns to display (comma-separated)","name":"columns","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-header":{"description":"Hide table header","name":"no-header","allowNo":false,"type":"boolean"},"no-truncate":{"description":"Do not truncate values in table","name":"no-truncate","allowNo":false,"type":"boolean"},"profile":{"char":"p","description":"Profile to use for this command","name":"profile","hasDynamicHelp":false,"multiple":false,"type":"option"},"token":{"description":"Bearer token for this call (not saved)","name":"token","hasDynamicHelp":false,"multiple":false,"type":"option"},"quiet":{"char":"q","description":"Suppress output except errors","name":"quiet","allowNo":false,"type":"boolean"},"no-color":{"description":"Disable color output","name":"no-color","allowNo":false,"type":"boolean"},"verbose":{"char":"v","description":"Show HTTP request/response details","name":"verbose","allowNo":false,"type":"boolean"},"no-input":{"description":"Disable interactive prompts","name":"no-input","allowNo":false,"type":"boolean"},"dry-run":{"description":"Show HTTP request without sending","name":"dry-run","allowNo":false,"type":"boolean"},"timeout":{"description":"Request timeout in seconds","name":"timeout","hasDynamicHelp":false,"multiple":false,"type":"option"},"no-retry":{"description":"Disable auto-retry on 429/503","name":"no-retry","allowNo":false,"type":"boolean"},"json":{"description":"Output as JSON (alias for --output json)","hidden":true,"name":"json","allowNo":false,"type":"boolean"},"plain":{"description":"Plain output: TSV, no header, ID column first, no color (for scripts)","name":"plain","allowNo":false,"type":"boolean"},"title":{"description":"Заголовок представления (макс. 24 символов)","name":"title","hasDynamicHelp":false,"multiple":false,"type":"option"},"close-text":{"description":"Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. (макс. 24 символов)","name":"close-text","hasDynamicHelp":false,"multiple":false,"type":"option"},"submit-text":{"description":"Текст кнопки отправки формы (макс. 24 символов)","name":"submit-text","hasDynamicHelp":false,"multiple":false,"type":"option"},"blocks":{"description":"Массив блоков представления","name":"blocks","hasDynamicHelp":false,"multiple":false,"type":"option"},"type":{"description":"Способ открытия представления","name":"type","hasDynamicHelp":false,"multiple":false,"options":["modal"],"type":"option"},"trigger-id":{"description":"Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)","name":"trigger-id","hasDynamicHelp":false,"multiple":false,"type":"option"},"private-metadata":{"description":"Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. (макс. 3000 символов)","name":"private-metadata","hasDynamicHelp":false,"multiple":false,"type":"option"},"callback-id":{"description":"Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. (макс. 255 символов)","name":"callback-id","hasDynamicHelp":false,"multiple":false,"type":"option"}},"hasDynamicHelp":false,"hiddenAliases":[],"id":"views:open","pluginAlias":"@pachca/cli","pluginName":"@pachca/cli","pluginType":"core","strict":true,"enableJsonFlag":false,"scope":"views:write","apiMethod":"POST","apiPath":"/views/open","requiredFlags":["title","blocks","type","trigger-id"],"isESM":true,"relativePath":["dist","commands","views","open.js"]}},"version":"0.0.0"} \ No newline at end of file diff --git a/packages/cli/scripts/generate-cli.ts b/packages/cli/scripts/generate-cli.ts index 33ee40616..3dfeeb4a4 100644 --- a/packages/cli/scripts/generate-cli.ts +++ b/packages/cli/scripts/generate-cli.ts @@ -628,7 +628,10 @@ function generateCommandCode(p: CommandGenParams): string { continue; } const flagName = toKebabCase(param.name); - const isArrayParam = param.schema.type === 'array'; + // Resolve before asking — an array behind `allOf` or a `['array','null']` + // tuple has no literal `type: 'array'`, and would silently be sent as the + // raw comma string. This matches how the flag's help text is derived above. + const isArrayParam = getSchemaType(resolveAllOf(param.schema)) === 'array'; const flagRef = flagName !== param.name ? `flags['${flagName}']` : `flags['${param.name}']`; const value = isArrayParam ? `${flagRef}?.split(',')` : flagRef; const key = flagName !== param.name ? `'${param.name}'` : param.name; @@ -728,6 +731,16 @@ function generateCommandCode(p: CommandGenParams): string { runBodyLines.push(` let formData: FormData | undefined;`); runBodyLines.push(` if (flags.file) {`); runBodyLines.push(` formData = new FormData();`); + // Text fields FIRST, binary LAST. An S3 POST policy ignores every field + // that follows the file part, so putting the file first drops `policy`, + // `x-amz-*` and `key` and the upload 403s. Mirrors the hand-written + // `upload.ts`, which has always had this order. + for (const field of p.bodyFields) { + if (field.format === 'binary') continue; + const flagName = toKebabCase(field.name); + const wireName = MULTIPART_WIRE_NAMES[field.name] || field.name; + runBodyLines.push(` if (flags['${flagName}']) formData.append('${wireName}', String(flags['${flagName}']));`); + } runBodyLines.push(` if (flags.file === '-') {`); runBodyLines.push(` const chunks: Buffer[] = [];`); runBodyLines.push(` for await (const chunk of process.stdin) chunks.push(chunk as Buffer);`); @@ -737,13 +750,6 @@ function generateCommandCode(p: CommandGenParams): string { runBodyLines.push(` const blob = new Blob([fs.readFileSync(flags.file)]);`); runBodyLines.push(` formData.append('${binaryField?.name || 'file'}', blob, path.basename(flags.file));`); runBodyLines.push(` }`); - // Add other fields to FormData - for (const field of p.bodyFields) { - if (field.format === 'binary') continue; - const flagName = toKebabCase(field.name); - const wireName = MULTIPART_WIRE_NAMES[field.name] || field.name; - runBodyLines.push(` if (flags['${flagName}']) formData.append('${wireName}', String(flags['${flagName}']));`); - } runBodyLines.push(` }`); runBodyLines.push(''); runBodyLines.push(` const { data } = await this.apiRequest({`); @@ -838,14 +844,17 @@ function generateCommandCode(p: CommandGenParams): string { // Unwrap response data runBodyLines.push(''); + // `data` is null for 204 / empty-body responses (see client.ts). Guard the + // cast: an S3 direct upload answers 204, and reading `.data` off null threw + // a TypeError on every successful upload. if (p.isList) { - runBodyLines.push(` const responseBody = data as Record;`); + runBodyLines.push(` const responseBody = (data ?? {}) as Record;`); runBodyLines.push(` const items = responseBody.data ?? responseBody;`); runBodyLines.push(` this.output(items);`); } else if (p.endpoint.method === 'DELETE') { runBodyLines.push(` this.success('Удалено');`); } else { - runBodyLines.push(` const responseBody = data as Record;`); + runBodyLines.push(` const responseBody = (data ?? {}) as Record;`); runBodyLines.push(` const result = responseBody.data ?? responseBody;`); runBodyLines.push(` this.output(result);`); } @@ -1259,25 +1268,20 @@ async function loadWorkflowExamples(endpoints: Endpoint[]): Promise 0 ? requestedTimeout : DEFAULT_TIMEOUT; const noRetry = opts.noRetry ?? clientFlags?.['no-retry'] ?? false; + // Retrying a request the server may already have committed duplicates it. + // Only these methods are safe to repeat blindly. + const safeMethod = ['GET', 'HEAD', 'OPTIONS', 'PUT'].includes(opts.method); const fetchHeaders: Record = { ...(opts.noAuth ? {} : { Authorization: `Bearer ${opts.token}` }), @@ -167,15 +190,20 @@ export async function request( const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutSeconds * 1000); - const response = await fetch(url, { - method: opts.method, - headers: fetchHeaders, - body: fetchBody, - signal: controller.signal, - redirect: opts.isRedirect ? 'manual' : 'follow', - }); - - clearTimeout(timer); + let response: Response; + try { + response = await fetch(url, { + method: opts.method, + headers: fetchHeaders, + body: fetchBody, + signal: controller.signal, + redirect: opts.isRedirect ? 'manual' : 'follow', + }); + } finally { + // Must run on reject too: a leaked timer keeps the event loop alive and + // the CLI hangs for the full timeout after an otherwise successful retry. + clearTimeout(timer); + } if (clientFlags?.verbose) { process.stderr.write(`${ansis.dim(`← ${response.status} ${response.statusText}`)}\n`); @@ -192,11 +220,10 @@ export async function request( }; } - // Handle rate limiting (429) + // Handle rate limiting (429). Safe for any method: a throttled request + // was rejected before it was processed, so it cannot have been committed. if (response.status === 429 && !noRetry && attempt < MAX_RETRIES) { - const retryAfter = response.headers.get('retry-after'); - const parsed = retryAfter ? Number.parseInt(retryAfter, 10) : NaN; - const waitMs = Number.isNaN(parsed) ? 1000 : parsed * 1000; + const waitMs = parseRetryAfter(response.headers.get('retry-after')); if (clientFlags?.verbose) { process.stderr.write(`${ansis.dim(`⏳ Rate limited, retrying in ${waitMs}ms...`)}\n`); } @@ -204,8 +231,10 @@ export async function request( continue; } - // Handle 503 with backoff - if (response.status === 503 && !noRetry && attempt < MAX_RETRIES) { + // Handle 503 with backoff. Unlike 429, a 503 from a proxy or a draining + // load balancer says nothing about whether the backend already committed + // the write — retrying a POST there duplicates the message. + if (response.status === 503 && safeMethod && !noRetry && attempt < MAX_RETRIES) { const baseMs = 1000; const waitMs = baseMs * Math.pow(2, attempt) + Math.random() * baseMs; if (clientFlags?.verbose) { @@ -253,7 +282,6 @@ export async function request( lastError = error as Error; // Only retry network errors for idempotent methods (not POST/DELETE) - const safeMethod = ['GET', 'HEAD', 'OPTIONS', 'PUT'].includes(opts.method); if (!safeMethod || noRetry || attempt >= MAX_RETRIES) { break; } @@ -367,7 +395,11 @@ export async function downloadFile(url: string, savePath: string): Promise<{ siz const urlPath = new URL(url).pathname; filename = path.basename(urlPath.split('?')[0]); } - if (!filename) filename = 'download'; + // Strip any directory part: the name comes from a Content-Disposition on + // a redirect target outside our trust boundary, and `../../..` in it would + // otherwise let the response choose where on disk to write. + filename = path.basename(filename); + if (!filename || filename === '.' || filename === '..') filename = 'download'; if (!fs.existsSync(savePath)) { throw new Error(`Directory does not exist: ${savePath}`); diff --git a/packages/cli/src/commands/bots/create.ts b/packages/cli/src/commands/bots/create.ts index 038ef7ae6..f9734bd34 100644 --- a/packages/cli/src/commands/bots/create.ts +++ b/packages/cli/src/commands/bots/create.ts @@ -7,8 +7,8 @@ export default class BotsCreate extends BaseCommand { static override description = "Новый бот"; static override examples = [ - "Создать бота через API и получить токен:\n $ pachca bots create", - "Настроить бота с исходящим вебхуком:\n $ pachca bots create" + "Создать бота через API и получить токен — Создай бота. Только пользовательским токеном (не токеном бота); `nickname` обязан заканчиваться на `_bot`. Параметры вебхука (Webhook URL, события, команды) можно задать сразу или позже. Скоупы токена бота можно ограничить флагом `--scopes` (если не указать — бот получит набор по умолчанию):\n $ pachca bots create", + "Настроить бота с исходящим вебхуком — Создай бота, сразу указав Webhook URL и события в одном вызове (детали создания и работы с токеном — в сценарии «Создать бота через API и получить токен»):\n $ pachca bots create" ]; static scope = "bots:write"; @@ -42,7 +42,7 @@ export default class BotsCreate extends BaseCommand { description: "Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.", }), 'scopes': Flags.string({ - description: "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.", + description: "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.", }), 'template': Flags.string({ description: "Шаблон форматирования входящего вебхука", @@ -141,7 +141,7 @@ export default class BotsCreate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/bots/delete.ts b/packages/cli/src/commands/bots/delete.ts index 5c1796347..27d4ebe92 100644 --- a/packages/cli/src/commands/bots/delete.ts +++ b/packages/cli/src/commands/bots/delete.ts @@ -7,7 +7,7 @@ export default class BotsDelete extends BaseCommand { static override description = "Удаление бота"; static override examples = [ - "Найти и удалить бота:\n $ pachca bots delete" + "Найти и удалить бота — Возьми `id` нужного бота из списка и удали его (скоуп `bots:write`). Доступно администратору, владельцу компании или создателю бота — владельцы чатов удалять бота не могут. Прежний токен инвалидируется сразу, бот исключается из всех чатов, его исходящий вебхук удаляется:\n $ pachca bots delete" ]; static scope = "bots:write"; diff --git a/packages/cli/src/commands/bots/get.ts b/packages/cli/src/commands/bots/get.ts index caf172f24..a0a5686c8 100644 --- a/packages/cli/src/commands/bots/get.ts +++ b/packages/cli/src/commands/bots/get.ts @@ -31,7 +31,7 @@ export default class BotsGet extends BaseCommand { path: `/bots/${args.id}`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/bots/list-events.ts b/packages/cli/src/commands/bots/list-events.ts index 750e4ddbe..d32311789 100644 --- a/packages/cli/src/commands/bots/list-events.ts +++ b/packages/cli/src/commands/bots/list-events.ts @@ -6,7 +6,7 @@ export default class BotsListEvents extends BaseCommand { static override description = "История событий"; static override examples = [ - "Обработка событий через историю (polling):\n $ pachca bots list-events" + "Обработка событий через историю (polling) — Получи накопленные события:\n $ pachca bots list-events" ]; static scope = "webhooks:events:read"; @@ -95,7 +95,7 @@ export default class BotsListEvents extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/bots/list.ts b/packages/cli/src/commands/bots/list.ts index afb357d4c..4b50a9938 100644 --- a/packages/cli/src/commands/bots/list.ts +++ b/packages/cli/src/commands/bots/list.ts @@ -6,7 +6,7 @@ export default class BotsList extends BaseCommand { static override description = "Список ботов"; static override examples = [ - "Найти и удалить бота:\n $ pachca bots list" + "Найти и удалить бота — Пользовательским токеном (скоуп `bots:read`) получи список ботов, доступных тебе для редактирования: созданных тобой и тех, чьи настройки открывают тебе доступ. Фильтруй по имени параметром `query`, следующую страницу бери из `meta.paginate.next_page`:\n $ pachca bots list" ]; static scope = "bots:read"; @@ -100,7 +100,7 @@ export default class BotsList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/bots/recreate-token-self.ts b/packages/cli/src/commands/bots/recreate-token-self.ts index de0a1b415..ecd41efaa 100644 --- a/packages/cli/src/commands/bots/recreate-token-self.ts +++ b/packages/cli/src/commands/bots/recreate-token-self.ts @@ -6,7 +6,7 @@ export default class BotsRecreateTokenSelf extends BaseCommand { static override description = "Ротация собственного токена бота"; static override examples = [ - "Ротация токена бота:\n $ pachca bots recreate-token-self" + "Ротация токена бота — Или: бот перевыпускает собственный токен своим же токеном (скоуп `bot_self:write`). Токен, которым выполнен запрос, инвалидируется сразу — обязательно сохрани новый `access_token` из ответа, иначе бот потеряет доступ к API:\n $ pachca bots recreate-token-self" ]; static scope = "bot_self:write"; @@ -32,7 +32,7 @@ export default class BotsRecreateTokenSelf extends BaseCommand { path: '/bot/recreate_token', }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/bots/recreate-token.ts b/packages/cli/src/commands/bots/recreate-token.ts index 26f8c44a9..5231f973a 100644 --- a/packages/cli/src/commands/bots/recreate-token.ts +++ b/packages/cli/src/commands/bots/recreate-token.ts @@ -6,7 +6,7 @@ export default class BotsRecreateToken extends BaseCommand { static override description = "Ротация токена бота"; static override examples = [ - "Ротация токена бота:\n $ pachca bots recreate-token" + "Ротация токена бота — Пользовательским токеном (администратор, владелец компании или создатель бота) — перевыпусти токен по `id` бота. Прежний токен инвалидируется сразу:\n $ pachca bots recreate-token" ]; static scope = "bots:write"; @@ -35,7 +35,7 @@ export default class BotsRecreateToken extends BaseCommand { path: `/bots/${args.id}/recreate_token`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/bots/remove-event.ts b/packages/cli/src/commands/bots/remove-event.ts index 5ab04373a..9c3770543 100644 --- a/packages/cli/src/commands/bots/remove-event.ts +++ b/packages/cli/src/commands/bots/remove-event.ts @@ -7,7 +7,7 @@ export default class BotsRemoveEvent extends BaseCommand { static override description = "Удаление события"; static override examples = [ - "Обработка событий через историю (polling):\n $ pachca bots remove-event" + "Обработка событий через историю (polling) — Удали обработанное событие:\n $ pachca bots remove-event" ]; static scope = "webhooks:events:delete"; diff --git a/packages/cli/src/commands/bots/update-webhook.ts b/packages/cli/src/commands/bots/update-webhook.ts index 7ab8d0c95..96a527aea 100644 --- a/packages/cli/src/commands/bots/update-webhook.ts +++ b/packages/cli/src/commands/bots/update-webhook.ts @@ -7,7 +7,7 @@ export default class BotsUpdateWebhook extends BaseCommand { static override description = "Саморегистрация вебхука бота"; static override examples = [ - "Обновить Webhook URL бота:\n $ pachca bots update-webhook" + "Обновить Webhook URL бота — Или: бот сам обновляет свой webhook своим же токеном — без `id` и без участия администратора (нужен скоуп `bot_self:webhook:write`):\n $ pachca bots update-webhook" ]; static scope = "bot_self:webhook:write"; @@ -72,7 +72,7 @@ export default class BotsUpdateWebhook extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/bots/update.ts b/packages/cli/src/commands/bots/update.ts index de1df0bca..177be3869 100644 --- a/packages/cli/src/commands/bots/update.ts +++ b/packages/cli/src/commands/bots/update.ts @@ -6,7 +6,7 @@ export default class BotsUpdate extends BaseCommand { static override description = "Редактирование бота"; static override examples = [ - "Обновить Webhook URL бота:\n $ pachca bots update" + "Обновить Webhook URL бота — Пользовательским токеном (с правом редактировать бота) — обнови URL по `id` бота. Пустая строка отключает вебхук:\n $ pachca bots update" ]; static scope = "bots:write"; @@ -42,7 +42,7 @@ export default class BotsUpdate extends BaseCommand { description: "Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.", }), 'scopes': Flags.string({ - description: "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.", + description: "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.", }), 'template': Flags.string({ description: "Шаблон форматирования входящего вебхука", @@ -122,7 +122,7 @@ export default class BotsUpdate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/chats/archive.ts b/packages/cli/src/commands/chats/archive.ts index 8597e35a9..fc0b2678b 100644 --- a/packages/cli/src/commands/chats/archive.ts +++ b/packages/cli/src/commands/chats/archive.ts @@ -6,8 +6,8 @@ export default class ChatsArchive extends BaseCommand { static override description = "Архивация чата"; static override examples = [ - "Архивация и управление чатом:\n $ pachca chats archive", - "Найти и заархивировать неактивные чаты:\n $ pachca chats archive" + "Архивация и управление чатом — Архивировать чат:\n $ pachca chats archive", + "Найти и заархивировать неактивные чаты — Для каждого чата: архивируй:\n $ pachca chats archive" ]; static scope = "chats:archive"; @@ -35,7 +35,7 @@ export default class ChatsArchive extends BaseCommand { path: `/chats/${args.id}/archive`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/chats/create.ts b/packages/cli/src/commands/chats/create.ts index 7fd7119e0..8b36d8383 100644 --- a/packages/cli/src/commands/chats/create.ts +++ b/packages/cli/src/commands/chats/create.ts @@ -7,8 +7,8 @@ export default class ChatsCreate extends BaseCommand { static override description = "Новый чат"; static override examples = [ - "Создать канал и пригласить участников:\n $ pachca chats create", - "Создать проектную беседу из шаблона:\n $ pachca chats create" + "Создать канал и пригласить участников — Создай канал с участниками:\n $ pachca chats create", + "Создать проектную беседу из шаблона — Создай беседу с участниками из тега:\n $ pachca chats create" ]; static scope = "chats:create"; @@ -92,7 +92,7 @@ export default class ChatsCreate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/chats/download-export.ts b/packages/cli/src/commands/chats/download-export.ts index 13972e170..d8b1b7f30 100644 --- a/packages/cli/src/commands/chats/download-export.ts +++ b/packages/cli/src/commands/chats/download-export.ts @@ -8,7 +8,7 @@ export default class ChatsDownloadExport extends BaseCommand { static override description = "Скачать архив экспорта"; static override examples = [ - "Экспорт истории чата:\n $ pachca chats download-export" + "Экспорт истории чата — Скачай файл экспорта:\n $ pachca chats download-export" ]; static override hiddenAliases = ["common:get-exports"]; @@ -48,7 +48,7 @@ export default class ChatsDownloadExport extends BaseCommand { return; } - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/chats/get.ts b/packages/cli/src/commands/chats/get.ts index 255e85afb..c9f3033e2 100644 --- a/packages/cli/src/commands/chats/get.ts +++ b/packages/cli/src/commands/chats/get.ts @@ -31,7 +31,7 @@ export default class ChatsGet extends BaseCommand { path: `/chats/${args.id}`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/chats/list.ts b/packages/cli/src/commands/chats/list.ts index 49398b14f..2aca863de 100644 --- a/packages/cli/src/commands/chats/list.ts +++ b/packages/cli/src/commands/chats/list.ts @@ -6,9 +6,9 @@ export default class ChatsList extends BaseCommand { static override description = "Список чатов"; static override examples = [ - "Найти активные чаты за период:\n $ pachca chats list", - "Найти и заархивировать неактивные чаты:\n $ pachca chats list", - "Создать гостя в чат:\n $ pachca chats list" + "Найти активные чаты за период — Получи чаты с активностью после указанной даты:\n $ pachca chats list", + "Найти и заархивировать неактивные чаты — Получи чаты без активности с нужной даты:\n $ pachca chats list", + "Создать гостя в чат — Выбери активный чат, в который добавить гостя — узнай его ID:\n $ pachca chats list" ]; static scope = "chats:read"; @@ -134,7 +134,7 @@ export default class ChatsList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/chats/request-export.ts b/packages/cli/src/commands/chats/request-export.ts index d66ed4b1b..d4970ba6f 100644 --- a/packages/cli/src/commands/chats/request-export.ts +++ b/packages/cli/src/commands/chats/request-export.ts @@ -7,7 +7,7 @@ export default class ChatsRequestExport extends BaseCommand { static override description = "Экспорт сообщений"; static override examples = [ - "Экспорт истории чата:\n $ pachca chats request-export" + "Экспорт истории чата — Запроси экспорт:\n $ pachca chats request-export" ]; static override hiddenAliases = ["common:request-export"]; @@ -84,7 +84,7 @@ export default class ChatsRequestExport extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/chats/unarchive.ts b/packages/cli/src/commands/chats/unarchive.ts index 9d26b1af5..10283e3e5 100644 --- a/packages/cli/src/commands/chats/unarchive.ts +++ b/packages/cli/src/commands/chats/unarchive.ts @@ -6,7 +6,7 @@ export default class ChatsUnarchive extends BaseCommand { static override description = "Разархивация чата"; static override examples = [ - "Архивация и управление чатом:\n $ pachca chats unarchive" + "Архивация и управление чатом — Разархивировать чат:\n $ pachca chats unarchive" ]; static scope = "chats:archive"; @@ -34,7 +34,7 @@ export default class ChatsUnarchive extends BaseCommand { path: `/chats/${args.id}/unarchive`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/chats/update.ts b/packages/cli/src/commands/chats/update.ts index 9af2bb3ea..2365803ae 100644 --- a/packages/cli/src/commands/chats/update.ts +++ b/packages/cli/src/commands/chats/update.ts @@ -6,7 +6,7 @@ export default class ChatsUpdate extends BaseCommand { static override description = "Редактирование чата"; static override examples = [ - "Переименовать или обновить чат:\n $ pachca chats update" + "Переименовать или обновить чат — Обнови чат:\n $ pachca chats update" ]; static scope = "chats:update"; @@ -65,7 +65,7 @@ export default class ChatsUpdate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/custom-properties/list.ts b/packages/cli/src/commands/custom-properties/list.ts index a164b94be..e2ccce6d0 100644 --- a/packages/cli/src/commands/custom-properties/list.ts +++ b/packages/cli/src/commands/custom-properties/list.ts @@ -7,7 +7,7 @@ export default class CustomPropertiesList extends BaseCommand { static override description = "Список дополнительных полей"; static override examples = [ - "Получить кастомные поля профиля:\n $ pachca custom-properties list" + "Получить кастомные поля профиля — Получи список дополнительных полей для сотрудников:\n $ pachca custom-properties list" ]; static override hiddenAliases = ["common:custom-properties"]; @@ -62,7 +62,7 @@ export default class CustomPropertiesList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/files/direct-url.ts b/packages/cli/src/commands/files/direct-url.ts index fd60b770f..2094b663b 100644 --- a/packages/cli/src/commands/files/direct-url.ts +++ b/packages/cli/src/commands/files/direct-url.ts @@ -87,6 +87,14 @@ export default class FilesDirectUrl extends BaseCommand { let formData: FormData | undefined; if (flags.file) { formData = new FormData(); + if (flags['content-disposition']) formData.append('Content-Disposition', String(flags['content-disposition'])); + if (flags['acl']) formData.append('acl', String(flags['acl'])); + if (flags['policy']) formData.append('policy', String(flags['policy'])); + if (flags['x-amz-credential']) formData.append('x-amz-credential', String(flags['x-amz-credential'])); + if (flags['x-amz-algorithm']) formData.append('x-amz-algorithm', String(flags['x-amz-algorithm'])); + if (flags['x-amz-date']) formData.append('x-amz-date', String(flags['x-amz-date'])); + if (flags['x-amz-signature']) formData.append('x-amz-signature', String(flags['x-amz-signature'])); + if (flags['key']) formData.append('key', String(flags['key'])); if (flags.file === '-') { const chunks: Buffer[] = []; for await (const chunk of process.stdin) chunks.push(chunk as Buffer); @@ -96,14 +104,6 @@ export default class FilesDirectUrl extends BaseCommand { const blob = new Blob([fs.readFileSync(flags.file)]); formData.append('file', blob, path.basename(flags.file)); } - if (flags['content-disposition']) formData.append('Content-Disposition', String(flags['content-disposition'])); - if (flags['acl']) formData.append('acl', String(flags['acl'])); - if (flags['policy']) formData.append('policy', String(flags['policy'])); - if (flags['x-amz-credential']) formData.append('x-amz-credential', String(flags['x-amz-credential'])); - if (flags['x-amz-algorithm']) formData.append('x-amz-algorithm', String(flags['x-amz-algorithm'])); - if (flags['x-amz-date']) formData.append('x-amz-date', String(flags['x-amz-date'])); - if (flags['x-amz-signature']) formData.append('x-amz-signature', String(flags['x-amz-signature'])); - if (flags['key']) formData.append('key', String(flags['key'])); } const { data } = await this.apiRequest({ @@ -113,7 +113,7 @@ export default class FilesDirectUrl extends BaseCommand { noAuth: true, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/files/uploads.ts b/packages/cli/src/commands/files/uploads.ts index 9915cb886..710b8cef0 100644 --- a/packages/cli/src/commands/files/uploads.ts +++ b/packages/cli/src/commands/files/uploads.ts @@ -6,7 +6,7 @@ export default class FilesUploads extends BaseCommand { static override description = "Получение подписи, ключа и других параметров"; static override examples = [ - "Изменить вложения сообщения:\n $ pachca files uploads" + "Изменить вложения сообщения — Если нужно добавить новый файл — загрузи его:\n $ pachca files uploads" ]; static override hiddenAliases = ["common:uploads"]; @@ -33,7 +33,7 @@ export default class FilesUploads extends BaseCommand { path: '/uploads', }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/group-tags/create.ts b/packages/cli/src/commands/group-tags/create.ts index 3855f4307..44a0cbdb9 100644 --- a/packages/cli/src/commands/group-tags/create.ts +++ b/packages/cli/src/commands/group-tags/create.ts @@ -7,7 +7,7 @@ export default class GroupTagsCreate extends BaseCommand { static override description = "Новый тег"; static override examples = [ - "Массовое создание сотрудников с тегами:\n $ pachca group-tags create" + "Массовое создание сотрудников с тегами — Создай тег (если нужен):\n $ pachca group-tags create" ]; static scope = "group_tags:write"; @@ -73,7 +73,7 @@ export default class GroupTagsCreate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/group-tags/get.ts b/packages/cli/src/commands/group-tags/get.ts index e59caeaf8..722dcece4 100644 --- a/packages/cli/src/commands/group-tags/get.ts +++ b/packages/cli/src/commands/group-tags/get.ts @@ -31,7 +31,7 @@ export default class GroupTagsGet extends BaseCommand { path: `/group_tags/${args.id}`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/group-tags/list-users.ts b/packages/cli/src/commands/group-tags/list-users.ts index 177ebbe26..b1121f453 100644 --- a/packages/cli/src/commands/group-tags/list-users.ts +++ b/packages/cli/src/commands/group-tags/list-users.ts @@ -6,7 +6,7 @@ export default class GroupTagsListUsers extends BaseCommand { static override description = "Список сотрудников тега"; static override examples = [ - "Получить всех сотрудников тега/департамента:\n $ pachca group-tags list-users" + "Получить всех сотрудников тега/департамента — Получи всех участников тега:\n $ pachca group-tags list-users" ]; static scope = "group_tags:read"; @@ -98,7 +98,7 @@ export default class GroupTagsListUsers extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/group-tags/list.ts b/packages/cli/src/commands/group-tags/list.ts index 38755234c..84bb48bc3 100644 --- a/packages/cli/src/commands/group-tags/list.ts +++ b/packages/cli/src/commands/group-tags/list.ts @@ -6,7 +6,7 @@ export default class GroupTagsList extends BaseCommand { static override description = "Список тегов сотрудников"; static override examples = [ - "Получить всех сотрудников тега/департамента:\n $ pachca group-tags list" + "Получить всех сотрудников тега/департамента — Найди тег по названию, возьми `id`:\n $ pachca group-tags list" ]; static scope = "group_tags:read"; @@ -100,7 +100,7 @@ export default class GroupTagsList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/group-tags/update.ts b/packages/cli/src/commands/group-tags/update.ts index 570a270af..b3bb6a9c8 100644 --- a/packages/cli/src/commands/group-tags/update.ts +++ b/packages/cli/src/commands/group-tags/update.ts @@ -79,7 +79,7 @@ export default class GroupTagsUpdate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/members/add-group-tags.ts b/packages/cli/src/commands/members/add-group-tags.ts index 606947d86..90d310d22 100644 --- a/packages/cli/src/commands/members/add-group-tags.ts +++ b/packages/cli/src/commands/members/add-group-tags.ts @@ -62,7 +62,7 @@ export default class MembersAddGroupTags extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/members/add.ts b/packages/cli/src/commands/members/add.ts index 16a1b7e6e..dd0fe2638 100644 --- a/packages/cli/src/commands/members/add.ts +++ b/packages/cli/src/commands/members/add.ts @@ -7,9 +7,9 @@ export default class MembersAdd extends BaseCommand { static override description = "Добавление пользователей"; static override examples = [ - "Подписаться на тред сообщения:\n $ pachca members add", - "Создать канал и пригласить участников:\n $ pachca members add", - "Онбординг нового сотрудника:\n $ pachca members add" + "Подписаться на тред сообщения — Добавь бота в участники чата треда:\n $ pachca members add", + "Создать канал и пригласить участников — Или добавь участников позже:\n $ pachca members add", + "Онбординг нового сотрудника — Добавь в нужные каналы:\n $ pachca members add" ]; static scope = "chat_members:write"; @@ -73,7 +73,7 @@ export default class MembersAdd extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/members/leave.ts b/packages/cli/src/commands/members/leave.ts index ccaf1388d..119797630 100644 --- a/packages/cli/src/commands/members/leave.ts +++ b/packages/cli/src/commands/members/leave.ts @@ -7,7 +7,7 @@ export default class MembersLeave extends BaseCommand { static override description = "Выход из беседы или канала"; static override examples = [ - "Архивация и управление чатом:\n $ pachca members leave" + "Архивация и управление чатом — Покинуть чат:\n $ pachca members leave" ]; static scope = "chats:leave"; diff --git a/packages/cli/src/commands/members/list.ts b/packages/cli/src/commands/members/list.ts index d384624ce..d83f3d628 100644 --- a/packages/cli/src/commands/members/list.ts +++ b/packages/cli/src/commands/members/list.ts @@ -6,7 +6,8 @@ export default class MembersList extends BaseCommand { static override description = "Список участников чата"; static override examples = [ - "Упомянуть пользователя:\n $ pachca members list" + "Упомянуть пользователя — Ищи среди участников целевого чата:\n $ pachca members list", + "Упомянуть пользователя — Если пишешь в тред: также проверь участников родительского чата:\n $ pachca members list" ]; static scope = "chat_members:read"; @@ -105,7 +106,7 @@ export default class MembersList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/members/remove.ts b/packages/cli/src/commands/members/remove.ts index d2c2de5d5..94c6dc984 100644 --- a/packages/cli/src/commands/members/remove.ts +++ b/packages/cli/src/commands/members/remove.ts @@ -7,7 +7,7 @@ export default class MembersRemove extends BaseCommand { static override description = "Исключение пользователя"; static override examples = [ - "Архивация и управление чатом:\n $ pachca members remove" + "Архивация и управление чатом — Удалить участника:\n $ pachca members remove" ]; static scope = "chat_members:write"; diff --git a/packages/cli/src/commands/members/update.ts b/packages/cli/src/commands/members/update.ts index 2fbdd8f16..c72ff8679 100644 --- a/packages/cli/src/commands/members/update.ts +++ b/packages/cli/src/commands/members/update.ts @@ -7,7 +7,7 @@ export default class MembersUpdate extends BaseCommand { static override description = "Редактирование роли"; static override examples = [ - "Архивация и управление чатом:\n $ pachca members update" + "Архивация и управление чатом — Изменить роль участника:\n $ pachca members update" ]; static scope = "chat_members:write"; @@ -77,7 +77,7 @@ export default class MembersUpdate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/messages/create.ts b/packages/cli/src/commands/messages/create.ts index e9845f676..bdf53f296 100644 --- a/packages/cli/src/commands/messages/create.ts +++ b/packages/cli/src/commands/messages/create.ts @@ -7,9 +7,9 @@ export default class MessagesCreate extends BaseCommand { static override description = "Новое сообщение"; static override examples = [ - "Найти чат по имени и отправить сообщение:\n $ pachca messages create", - "Отправить сообщение в канал или беседу (если chat_id известен):\n $ pachca messages create", - "Отправить личное сообщение пользователю:\n $ pachca messages create" + "Найти чат по имени и отправить сообщение — Отправь сообщение в найденный чат:\n $ pachca messages create", + "Отправить сообщение в канал или беседу (если chat_id известен) — Отправь сообщение в чат:\n $ pachca messages create", + "Отправить личное сообщение пользователю — Отправь личное сообщение:\n $ pachca messages create" ]; static scope = "messages:create"; @@ -129,7 +129,7 @@ export default class MessagesCreate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/messages/delete.ts b/packages/cli/src/commands/messages/delete.ts index 1d7a8fc6b..07dc96031 100644 --- a/packages/cli/src/commands/messages/delete.ts +++ b/packages/cli/src/commands/messages/delete.ts @@ -7,7 +7,7 @@ export default class MessagesDelete extends BaseCommand { static override description = "Удаление сообщения"; static override examples = [ - "Удалить сообщение:\n $ pachca messages delete" + "Удалить сообщение — Удали сообщение:\n $ pachca messages delete" ]; static scope = "messages:delete"; diff --git a/packages/cli/src/commands/messages/get.ts b/packages/cli/src/commands/messages/get.ts index 897cd7e38..b35254e8c 100644 --- a/packages/cli/src/commands/messages/get.ts +++ b/packages/cli/src/commands/messages/get.ts @@ -6,9 +6,9 @@ export default class MessagesGet extends BaseCommand { static override description = "Информация о сообщении"; static override examples = [ - "Получить вложения из сообщения:\n $ pachca messages get", - "Изменить вложения сообщения:\n $ pachca messages get", - "Обработать входящий вебхук-событие:\n $ pachca messages get" + "Получить вложения из сообщения — Получи сообщение — в `files[]` каждый объект содержит `url`, `name`, `file_type`, `size`:\n $ pachca messages get", + "Изменить вложения сообщения — Получи текущие вложения из `files[]`:\n $ pachca messages get", + "Обработать входящий вебхук-событие — Для полной информации запроси сообщение — особенно для вложений (`files[]`):\n $ pachca messages get" ]; static scope = "messages:read"; @@ -37,7 +37,7 @@ export default class MessagesGet extends BaseCommand { path: `/messages/${args.id}`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/messages/list.ts b/packages/cli/src/commands/messages/list.ts index 13b57cadd..d6c58cef9 100644 --- a/packages/cli/src/commands/messages/list.ts +++ b/packages/cli/src/commands/messages/list.ts @@ -7,7 +7,7 @@ export default class MessagesList extends BaseCommand { static override description = "Список сообщений чата"; static override examples = [ - "Получить историю сообщений чата:\n $ pachca messages list" + "Получить историю сообщений чата — Получи сообщения чата с пагинацией:\n $ pachca messages list" ]; static scope = "messages:read"; @@ -144,7 +144,7 @@ export default class MessagesList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/messages/pin.ts b/packages/cli/src/commands/messages/pin.ts index 8f9f8136a..d7fc74fdf 100644 --- a/packages/cli/src/commands/messages/pin.ts +++ b/packages/cli/src/commands/messages/pin.ts @@ -6,7 +6,7 @@ export default class MessagesPin extends BaseCommand { static override description = "Закрепление сообщения"; static override examples = [ - "Закрепить/открепить сообщение:\n $ pachca messages pin" + "Закрепить/открепить сообщение — Закрепить сообщение:\n $ pachca messages pin" ]; static scope = "pins:write"; @@ -34,7 +34,7 @@ export default class MessagesPin extends BaseCommand { path: `/messages/${args.id}/pin`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/messages/unfurl.ts b/packages/cli/src/commands/messages/unfurl.ts index 20106190d..aadf9d69f 100644 --- a/packages/cli/src/commands/messages/unfurl.ts +++ b/packages/cli/src/commands/messages/unfurl.ts @@ -7,7 +7,7 @@ export default class MessagesUnfurl extends BaseCommand { static override description = "Unfurl (разворачивание ссылок)"; static override examples = [ - "Разворачивание ссылок (unfurling):\n $ pachca messages unfurl" + "Разворачивание ссылок (unfurling) — Отправь превью-данные:\n $ pachca messages unfurl" ]; static override hiddenAliases = ["link-previews:add"]; @@ -26,7 +26,7 @@ export default class MessagesUnfurl extends BaseCommand { static override flags = { ...BaseCommand.baseFlags, 'link-previews': Flags.string({ - description: "`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.", + description: "`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении", }), }; @@ -35,7 +35,7 @@ export default class MessagesUnfurl extends BaseCommand { this.parsedFlags = flags; const missingRequired: { flag: string; label: string; type: string }[] = [ - { flag: 'link-previews', label: "`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.", type: 'string' }, + { flag: 'link-previews', label: "`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении", type: 'string' }, ].filter((f) => (flags as Record)[f.flag] === undefined || (flags as Record)[f.flag] === null); if (missingRequired.length > 0) { @@ -67,7 +67,7 @@ export default class MessagesUnfurl extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/messages/unpin.ts b/packages/cli/src/commands/messages/unpin.ts index f7f93f1ab..7905f29ec 100644 --- a/packages/cli/src/commands/messages/unpin.ts +++ b/packages/cli/src/commands/messages/unpin.ts @@ -7,7 +7,7 @@ export default class MessagesUnpin extends BaseCommand { static override description = "Открепление сообщения"; static override examples = [ - "Закрепить/открепить сообщение:\n $ pachca messages unpin" + "Закрепить/открепить сообщение — Открепить сообщение:\n $ pachca messages unpin" ]; static scope = "pins:write"; diff --git a/packages/cli/src/commands/messages/update.ts b/packages/cli/src/commands/messages/update.ts index 2047f2d64..69b86b244 100644 --- a/packages/cli/src/commands/messages/update.ts +++ b/packages/cli/src/commands/messages/update.ts @@ -6,9 +6,9 @@ export default class MessagesUpdate extends BaseCommand { static override description = "Редактирование сообщения"; static override examples = [ - "Отредактировать сообщение:\n $ pachca messages update", - "Изменить вложения сообщения:\n $ pachca messages update", - "Обработать нажатие кнопки (callback):\n $ pachca messages update" + "Отредактировать сообщение — Обнови сообщение:\n $ pachca messages update", + "Изменить вложения сообщения — Обнови сообщение с новым массивом `files`:\n $ pachca messages update", + "Обработать нажатие кнопки (callback) — Опционально: обнови исходное сообщение:\n $ pachca messages update" ]; static scope = "messages:update"; @@ -79,7 +79,7 @@ export default class MessagesUpdate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/oauth/token-info.ts b/packages/cli/src/commands/oauth/token-info.ts index 484e5d26f..6aa22ef41 100644 --- a/packages/cli/src/commands/oauth/token-info.ts +++ b/packages/cli/src/commands/oauth/token-info.ts @@ -6,7 +6,7 @@ export default class OauthTokenInfo extends BaseCommand { static override description = "Информация о токене"; static override examples = [ - "Проверить свой токен:\n $ pachca oauth token-info" + "Проверить свой токен — Получи информацию о токене: скоупы, дату создания, срок жизни:\n $ pachca oauth token-info" ]; static override hiddenAliases = ["profile:get-info"]; @@ -32,7 +32,7 @@ export default class OauthTokenInfo extends BaseCommand { path: '/oauth/token/info', }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/profile/delete-avatar.ts b/packages/cli/src/commands/profile/delete-avatar.ts index 670494841..bc887052e 100644 --- a/packages/cli/src/commands/profile/delete-avatar.ts +++ b/packages/cli/src/commands/profile/delete-avatar.ts @@ -7,7 +7,7 @@ export default class ProfileDeleteAvatar extends BaseCommand { static override description = "Удаление своего аватара"; static override examples = [ - "Удалить аватар профиля:\n $ pachca profile delete-avatar" + "Удалить аватар профиля — Удали аватар:\n $ pachca profile delete-avatar" ]; static scope = "profile_avatar:write"; diff --git a/packages/cli/src/commands/profile/delete-status.ts b/packages/cli/src/commands/profile/delete-status.ts index f932c7979..90dcd8ecc 100644 --- a/packages/cli/src/commands/profile/delete-status.ts +++ b/packages/cli/src/commands/profile/delete-status.ts @@ -7,7 +7,7 @@ export default class ProfileDeleteStatus extends BaseCommand { static override description = "Удаление своего статуса"; static override examples = [ - "Сбросить статус:\n $ pachca profile delete-status" + "Сбросить статус — Удали статус:\n $ pachca profile delete-status" ]; static scope = "profile_status:write"; diff --git a/packages/cli/src/commands/profile/get-status.ts b/packages/cli/src/commands/profile/get-status.ts index f7d8daa84..d06bae41a 100644 --- a/packages/cli/src/commands/profile/get-status.ts +++ b/packages/cli/src/commands/profile/get-status.ts @@ -28,7 +28,7 @@ export default class ProfileGetStatus extends BaseCommand { path: '/profile/status', }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/profile/get.ts b/packages/cli/src/commands/profile/get.ts index 05e10e450..dd28b3306 100644 --- a/packages/cli/src/commands/profile/get.ts +++ b/packages/cli/src/commands/profile/get.ts @@ -6,8 +6,8 @@ export default class ProfileGet extends BaseCommand { static override description = "Свой профиль"; static override examples = [ - "Получить свой профиль:\n $ pachca profile get", - "Получить кастомные поля профиля:\n $ pachca profile get" + "Получить свой профиль — Получи информацию о текущем пользователе:\n $ pachca profile get", + "Получить кастомные поля профиля — Получи профиль — в `custom_properties` содержатся значения полей:\n $ pachca profile get" ]; static scope = "profile:read"; @@ -33,7 +33,7 @@ export default class ProfileGet extends BaseCommand { path: '/profile', }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/profile/update-avatar.ts b/packages/cli/src/commands/profile/update-avatar.ts index a5f8704bf..ccc55125a 100644 --- a/packages/cli/src/commands/profile/update-avatar.ts +++ b/packages/cli/src/commands/profile/update-avatar.ts @@ -8,7 +8,7 @@ export default class ProfileUpdateAvatar extends BaseCommand { static override description = "Загрузка своего аватара"; static override examples = [ - "Загрузить аватар профиля:\n $ pachca profile update-avatar" + "Загрузить аватар профиля — Загрузи аватар из файла:\n $ pachca profile update-avatar" ]; static scope = "profile_avatar:write"; @@ -51,7 +51,7 @@ export default class ProfileUpdateAvatar extends BaseCommand { formData, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/profile/update-status.ts b/packages/cli/src/commands/profile/update-status.ts index 2e3ed8b39..4c6c872d8 100644 --- a/packages/cli/src/commands/profile/update-status.ts +++ b/packages/cli/src/commands/profile/update-status.ts @@ -7,7 +7,7 @@ export default class ProfileUpdateStatus extends BaseCommand { static override description = "Новый свой статус"; static override examples = [ - "Установить статус:\n $ pachca profile update-status" + "Установить статус — Установи статус:\n $ pachca profile update-status" ]; static scope = "profile_status:write"; @@ -101,7 +101,7 @@ export default class ProfileUpdateStatus extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/reactions/add.ts b/packages/cli/src/commands/reactions/add.ts index 101b943b2..3513b8b69 100644 --- a/packages/cli/src/commands/reactions/add.ts +++ b/packages/cli/src/commands/reactions/add.ts @@ -7,7 +7,7 @@ export default class ReactionsAdd extends BaseCommand { static override description = "Добавление реакции"; static override examples = [ - "Добавить реакцию на сообщение:\n $ pachca reactions add" + "Добавить реакцию на сообщение — Добавь реакцию:\n $ pachca reactions add" ]; static scope = "reactions:write"; @@ -71,7 +71,7 @@ export default class ReactionsAdd extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/reactions/list.ts b/packages/cli/src/commands/reactions/list.ts index ffff14d67..97b11ac73 100644 --- a/packages/cli/src/commands/reactions/list.ts +++ b/packages/cli/src/commands/reactions/list.ts @@ -94,7 +94,7 @@ export default class ReactionsList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/reactions/remove.ts b/packages/cli/src/commands/reactions/remove.ts index d106d238b..57ab548ff 100644 --- a/packages/cli/src/commands/reactions/remove.ts +++ b/packages/cli/src/commands/reactions/remove.ts @@ -7,7 +7,7 @@ export default class ReactionsRemove extends BaseCommand { static override description = "Удаление реакции"; static override examples = [ - "Добавить реакцию на сообщение:\n $ pachca reactions remove" + "Добавить реакцию на сообщение — Убрать реакцию:\n $ pachca reactions remove" ]; static scope = "reactions:write"; diff --git a/packages/cli/src/commands/read-member/list-readers.ts b/packages/cli/src/commands/read-member/list-readers.ts index 40a1508dc..1e5a43c4b 100644 --- a/packages/cli/src/commands/read-member/list-readers.ts +++ b/packages/cli/src/commands/read-member/list-readers.ts @@ -6,7 +6,7 @@ export default class ReadMemberListReaders extends BaseCommand { static override description = "Список прочитавших сообщение"; static override examples = [ - "Проверить, кто прочитал сообщение:\n $ pachca read-member list-readers" + "Проверить, кто прочитал сообщение — Получи массив `user_id` прочитавших:\n $ pachca read-member list-readers" ]; static scope = "messages:read"; @@ -97,7 +97,7 @@ export default class ReadMemberListReaders extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/search/list-chats.ts b/packages/cli/src/commands/search/list-chats.ts index f7c164ca3..e7491b645 100644 --- a/packages/cli/src/commands/search/list-chats.ts +++ b/packages/cli/src/commands/search/list-chats.ts @@ -6,8 +6,8 @@ export default class SearchListChats extends BaseCommand { static override description = "Поиск чатов"; static override examples = [ - "Найти чат по имени и отправить сообщение:\n $ pachca search list-chats", - "Найти чат по названию:\n $ pachca search list-chats" + "Найти чат по имени и отправить сообщение — Найди чат по названию через поиск:\n $ pachca search list-chats", + "Найти чат по названию — Полнотекстовый поиск по чатам:\n $ pachca search list-chats" ]; static scope = "search:chats"; @@ -135,7 +135,7 @@ export default class SearchListChats extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/search/list-messages.ts b/packages/cli/src/commands/search/list-messages.ts index bf8d5d4c5..d7ec8a8cb 100644 --- a/packages/cli/src/commands/search/list-messages.ts +++ b/packages/cli/src/commands/search/list-messages.ts @@ -6,7 +6,7 @@ export default class SearchListMessages extends BaseCommand { static override description = "Поиск сообщений"; static override examples = [ - "Найти сообщение по тексту:\n $ pachca search list-messages" + "Найти сообщение по тексту — Полнотекстовый поиск по сообщениям:\n $ pachca search list-messages" ]; static scope = "search:messages"; @@ -139,7 +139,7 @@ export default class SearchListMessages extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/search/list-users.ts b/packages/cli/src/commands/search/list-users.ts index 97b19d6bf..0642558e6 100644 --- a/packages/cli/src/commands/search/list-users.ts +++ b/packages/cli/src/commands/search/list-users.ts @@ -6,9 +6,9 @@ export default class SearchListUsers extends BaseCommand { static override description = "Поиск сотрудников"; static override examples = [ - "Отправить личное сообщение пользователю:\n $ pachca search list-users", - "Упомянуть пользователя:\n $ pachca search list-users", - "Найти сотрудника по имени:\n $ pachca search list-users" + "Отправить личное сообщение пользователю — Определи `user_id` получателя:\n $ pachca search list-users", + "Упомянуть пользователя — Не нашёл — ищи по всей компании:\n $ pachca search list-users", + "Найти сотрудника по имени — Полнотекстовый поиск по сотрудникам:\n $ pachca search list-users" ]; static scope = "search:users"; @@ -129,7 +129,7 @@ export default class SearchListUsers extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/security/list.ts b/packages/cli/src/commands/security/list.ts index f1be1c519..b18ddd392 100644 --- a/packages/cli/src/commands/security/list.ts +++ b/packages/cli/src/commands/security/list.ts @@ -6,9 +6,9 @@ export default class SecurityList extends BaseCommand { static override description = "Журнал аудита событий"; static override examples = [ - "Получить журнал аудита событий:\n $ pachca security list", - "Мониторинг подозрительных входов:\n $ pachca security list", - "Экспорт логов за период:\n $ pachca security list" + "Получить журнал аудита событий — Получи журнал аудита:\n $ pachca security list", + "Мониторинг подозрительных входов — Получи события неудачных 2FA за период:\n $ pachca security list", + "Экспорт логов за период — Получи все события за период с пагинацией:\n $ pachca security list" ]; static scope = "audit_events:read"; @@ -27,7 +27,7 @@ export default class SecurityList extends BaseCommand { description: "Начальная метка времени (включительно)", }), 'end-time': Flags.string({ - description: "Конечная метка времени (исключительно)", + description: "Конечная метка времени (включительно)", }), 'event-key': Flags.string({ description: "Фильтр по конкретному типу события", @@ -134,7 +134,7 @@ export default class SecurityList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/tasks/create.ts b/packages/cli/src/commands/tasks/create.ts index f9ead6b6e..25154aef8 100644 --- a/packages/cli/src/commands/tasks/create.ts +++ b/packages/cli/src/commands/tasks/create.ts @@ -7,9 +7,9 @@ export default class TasksCreate extends BaseCommand { static override description = "Новое напоминание"; static override examples = [ - "Форма заявки/запроса:\n $ pachca tasks create", - "Создать напоминание:\n $ pachca tasks create", - "Создать серию напоминаний:\n $ pachca tasks create" + "Форма заявки/запроса — При submit: создай задачу или отправь уведомление ответственному:\n $ pachca tasks create", + "Создать напоминание — Создай задачу:\n $ pachca tasks create", + "Создать серию напоминаний — Для каждой даты: создай задачу:\n $ pachca tasks create" ]; static scope = "tasks:create"; @@ -34,7 +34,7 @@ export default class TasksCreate extends BaseCommand { description: "Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).", }), 'priority': Flags.integer({ - description: "Приоритет: 1, 2 (важно) или 3 (очень важно).", + description: "Приоритет: 1, 2 (важно) или 3 (очень важно)", }), 'performer-ids': Flags.string({ description: "Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)", @@ -105,7 +105,7 @@ export default class TasksCreate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/tasks/delete.ts b/packages/cli/src/commands/tasks/delete.ts index 9d0941977..758e425df 100644 --- a/packages/cli/src/commands/tasks/delete.ts +++ b/packages/cli/src/commands/tasks/delete.ts @@ -7,7 +7,7 @@ export default class TasksDelete extends BaseCommand { static override description = "Удаление напоминания"; static override examples = [ - "Удалить задачу:\n $ pachca tasks delete" + "Удалить задачу — Удали задачу:\n $ pachca tasks delete" ]; static scope = "tasks:delete"; diff --git a/packages/cli/src/commands/tasks/get.ts b/packages/cli/src/commands/tasks/get.ts index 9acd72cb6..f5a10036a 100644 --- a/packages/cli/src/commands/tasks/get.ts +++ b/packages/cli/src/commands/tasks/get.ts @@ -6,7 +6,7 @@ export default class TasksGet extends BaseCommand { static override description = "Информация о напоминании"; static override examples = [ - "Получить задачу по ID:\n $ pachca tasks get" + "Получить задачу по ID — Получи информацию о задаче:\n $ pachca tasks get" ]; static scope = "tasks:read"; @@ -35,7 +35,7 @@ export default class TasksGet extends BaseCommand { path: `/tasks/${args.id}`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/tasks/list.ts b/packages/cli/src/commands/tasks/list.ts index 20700ea6a..d3b439945 100644 --- a/packages/cli/src/commands/tasks/list.ts +++ b/packages/cli/src/commands/tasks/list.ts @@ -6,7 +6,7 @@ export default class TasksList extends BaseCommand { static override description = "Список напоминаний"; static override examples = [ - "Получить список предстоящих задач:\n $ pachca tasks list" + "Получить список предстоящих задач — Получи все задачи, фильтруй по `status` на клиенте:\n $ pachca tasks list" ]; static scope = "tasks:read"; @@ -95,7 +95,7 @@ export default class TasksList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/tasks/update.ts b/packages/cli/src/commands/tasks/update.ts index 5eba16b95..e84345cfa 100644 --- a/packages/cli/src/commands/tasks/update.ts +++ b/packages/cli/src/commands/tasks/update.ts @@ -6,8 +6,8 @@ export default class TasksUpdate extends BaseCommand { static override description = "Редактирование напоминания"; static override examples = [ - "Отметить задачу выполненной:\n $ pachca tasks update", - "Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update" + "Отметить задачу выполненной — Обнови статус задачи:\n $ pachca tasks update", + "Обновить задачу (перенести срок, сменить ответственных) — Обнови нужные поля задачи:\n $ pachca tasks update" ]; static scope = "tasks:update"; @@ -34,7 +34,7 @@ export default class TasksUpdate extends BaseCommand { description: "Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).", }), 'priority': Flags.integer({ - description: "Приоритет: 1, 2 (важно) или 3 (очень важно).", + description: "Приоритет: 1, 2 (важно) или 3 (очень важно)", }), 'performer-ids': Flags.string({ description: "Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»", @@ -95,7 +95,7 @@ export default class TasksUpdate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/threads/add.ts b/packages/cli/src/commands/threads/add.ts index 0fdb575ea..95f4dbe4f 100644 --- a/packages/cli/src/commands/threads/add.ts +++ b/packages/cli/src/commands/threads/add.ts @@ -6,8 +6,8 @@ export default class ThreadsAdd extends BaseCommand { static override description = "Новый тред"; static override examples = [ - "Ответить в тред (комментарий к сообщению):\n $ pachca thread add", - "Подписаться на тред сообщения:\n $ pachca thread add" + "Ответить в тред (комментарий к сообщению) — Получи или создай тред, возьми `thread.id` из ответа:\n $ pachca threads add", + "Подписаться на тред сообщения — Получи или создай тред, возьми `chat_id` из ответа:\n $ pachca threads add" ]; static scope = "threads:create"; @@ -36,7 +36,7 @@ export default class ThreadsAdd extends BaseCommand { path: `/messages/${args.id}/thread`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/threads/create.ts b/packages/cli/src/commands/threads/create.ts index 48437da79..b36013990 100644 --- a/packages/cli/src/commands/threads/create.ts +++ b/packages/cli/src/commands/threads/create.ts @@ -28,7 +28,7 @@ export default class ThreadsCreate extends BaseCommand { path: '/threads', }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/threads/get.ts b/packages/cli/src/commands/threads/get.ts index 36cbac4ce..792304447 100644 --- a/packages/cli/src/commands/threads/get.ts +++ b/packages/cli/src/commands/threads/get.ts @@ -31,7 +31,7 @@ export default class ThreadsGet extends BaseCommand { path: `/threads/${args.id}`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/threads/list.ts b/packages/cli/src/commands/threads/list.ts index 92c096971..07c99b99f 100644 --- a/packages/cli/src/commands/threads/list.ts +++ b/packages/cli/src/commands/threads/list.ts @@ -6,7 +6,8 @@ export default class ThreadsList extends BaseCommand { static override description = "Список тредов"; static override examples = [ - "Получить список активных тредов за период:\n $ pachca threads list" + "Получить список активных тредов за период — Запроси список тредов с фильтром по времени последнего сообщения и нужным `--limit`:\n $ pachca threads list", + "Получить список активных тредов за период — Если в ответе `meta.paginate.next_page` — пройди по страницам через `--cursor`:\n $ pachca threads list" ]; static scope = "threads:read"; @@ -105,7 +106,7 @@ export default class ThreadsList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/users/create.ts b/packages/cli/src/commands/users/create.ts index fa7e53cd9..b664fd84f 100644 --- a/packages/cli/src/commands/users/create.ts +++ b/packages/cli/src/commands/users/create.ts @@ -7,9 +7,9 @@ export default class UsersCreate extends BaseCommand { static override description = "Новый сотрудник"; static override examples = [ - "Массовое создание сотрудников с тегами:\n $ pachca users create", - "Создать гостя в чат:\n $ pachca users create", - "Онбординг нового сотрудника:\n $ pachca users create" + "Массовое создание сотрудников с тегами — Для каждого сотрудника: создай аккаунт с тегами:\n $ pachca users create", + "Создать гостя в чат — Создай гостя: роль `guest` и ровно один чат в `--chat-ids`:\n $ pachca users create", + "Онбординг нового сотрудника — Создай аккаунт:\n $ pachca users create" ]; static scope = "users:create"; @@ -143,7 +143,7 @@ export default class UsersCreate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/users/delete.ts b/packages/cli/src/commands/users/delete.ts index ae0277a3b..7b77a40e5 100644 --- a/packages/cli/src/commands/users/delete.ts +++ b/packages/cli/src/commands/users/delete.ts @@ -7,7 +7,7 @@ export default class UsersDelete extends BaseCommand { static override description = "Удаление сотрудника"; static override examples = [ - "Offboarding сотрудника:\n $ pachca users delete" + "Offboarding сотрудника — Опционально: удалить аккаунт полностью:\n $ pachca users delete" ]; static scope = "users:delete"; diff --git a/packages/cli/src/commands/users/get-status.ts b/packages/cli/src/commands/users/get-status.ts index c018e67c6..0afd46f22 100644 --- a/packages/cli/src/commands/users/get-status.ts +++ b/packages/cli/src/commands/users/get-status.ts @@ -6,7 +6,7 @@ export default class UsersGetStatus extends BaseCommand { static override description = "Статус сотрудника"; static override examples = [ - "Управление статусом сотрудника:\n $ pachca users get-status" + "Управление статусом сотрудника — Получить текущий статус:\n $ pachca users get-status" ]; static scope = "user_status:read"; @@ -35,7 +35,7 @@ export default class UsersGetStatus extends BaseCommand { path: `/users/${args.user_id}/status`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/users/get.ts b/packages/cli/src/commands/users/get.ts index c77db025d..8e59ec7e6 100644 --- a/packages/cli/src/commands/users/get.ts +++ b/packages/cli/src/commands/users/get.ts @@ -6,7 +6,7 @@ export default class UsersGet extends BaseCommand { static override description = "Информация о сотруднике"; static override examples = [ - "Получить сотрудника по ID:\n $ pachca users get" + "Получить сотрудника по ID — Получи информацию о сотруднике:\n $ pachca users get" ]; static scope = "users:read"; @@ -35,7 +35,7 @@ export default class UsersGet extends BaseCommand { path: `/users/${args.id}`, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/users/list.ts b/packages/cli/src/commands/users/list.ts index f02776755..a4ecfe0f7 100644 --- a/packages/cli/src/commands/users/list.ts +++ b/packages/cli/src/commands/users/list.ts @@ -6,9 +6,9 @@ export default class UsersList extends BaseCommand { static override description = "Список сотрудников"; static override examples = [ - "Проверить, кто прочитал сообщение:\n $ pachca users list", - "Разослать уведомление нескольким пользователям:\n $ pachca users list", - "Найти сотрудника по имени или email:\n $ pachca users list" + "Проверить, кто прочитал сообщение — При необходимости сопоставь с именами сотрудников:\n $ pachca users list", + "Разослать уведомление нескольким пользователям — Определи список `user_id` получателей:\n $ pachca users list", + "Найти сотрудника по имени или email — Поиск по имени/email (частичное совпадение):\n $ pachca users list" ]; static scope = "users:read"; @@ -102,7 +102,7 @@ export default class UsersList extends BaseCommand { }, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const items = responseBody.data ?? responseBody; this.output(items); } diff --git a/packages/cli/src/commands/users/remove-avatar.ts b/packages/cli/src/commands/users/remove-avatar.ts index d579c73f4..d4e2eb074 100644 --- a/packages/cli/src/commands/users/remove-avatar.ts +++ b/packages/cli/src/commands/users/remove-avatar.ts @@ -7,7 +7,7 @@ export default class UsersRemoveAvatar extends BaseCommand { static override description = "Удаление аватара сотрудника"; static override examples = [ - "Удалить аватар сотрудника:\n $ pachca users remove-avatar" + "Удалить аватар сотрудника — Удали аватар сотрудника:\n $ pachca users remove-avatar" ]; static scope = "user_avatar:write"; diff --git a/packages/cli/src/commands/users/remove-status.ts b/packages/cli/src/commands/users/remove-status.ts index da0d18981..25600c7f9 100644 --- a/packages/cli/src/commands/users/remove-status.ts +++ b/packages/cli/src/commands/users/remove-status.ts @@ -7,7 +7,7 @@ export default class UsersRemoveStatus extends BaseCommand { static override description = "Удаление статуса сотрудника"; static override examples = [ - "Управление статусом сотрудника:\n $ pachca users remove-status" + "Управление статусом сотрудника — Удалить статус:\n $ pachca users remove-status" ]; static scope = "user_status:write"; diff --git a/packages/cli/src/commands/users/update-avatar.ts b/packages/cli/src/commands/users/update-avatar.ts index fbc6711ec..7962c8a14 100644 --- a/packages/cli/src/commands/users/update-avatar.ts +++ b/packages/cli/src/commands/users/update-avatar.ts @@ -8,7 +8,7 @@ export default class UsersUpdateAvatar extends BaseCommand { static override description = "Загрузка аватара сотрудника"; static override examples = [ - "Загрузить аватар сотрудника:\n $ pachca users update-avatar" + "Загрузить аватар сотрудника — Загрузи аватар сотруднику:\n $ pachca users update-avatar" ]; static scope = "user_avatar:write"; @@ -54,7 +54,7 @@ export default class UsersUpdateAvatar extends BaseCommand { formData, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/users/update-status.ts b/packages/cli/src/commands/users/update-status.ts index 529223718..1d184955d 100644 --- a/packages/cli/src/commands/users/update-status.ts +++ b/packages/cli/src/commands/users/update-status.ts @@ -7,7 +7,7 @@ export default class UsersUpdateStatus extends BaseCommand { static override description = "Новый статус сотрудника"; static override examples = [ - "Управление статусом сотрудника:\n $ pachca users update-status" + "Управление статусом сотрудника — Установить статус:\n $ pachca users update-status" ]; static scope = "user_status:write"; @@ -104,7 +104,7 @@ export default class UsersUpdateStatus extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/users/update.ts b/packages/cli/src/commands/users/update.ts index 8fa966bc3..0ed3aa3f2 100644 --- a/packages/cli/src/commands/users/update.ts +++ b/packages/cli/src/commands/users/update.ts @@ -6,8 +6,8 @@ export default class UsersUpdate extends BaseCommand { static override description = "Редактирование сотрудника"; static override examples = [ - "Массовое создание сотрудников с тегами:\n $ pachca users update", - "Offboarding сотрудника:\n $ pachca users update" + "Массовое создание сотрудников с тегами — Или обнови существующего:\n $ pachca users update", + "Offboarding сотрудника — Заблокировать доступ:\n $ pachca users update" ]; static scope = "users:update"; @@ -117,7 +117,7 @@ export default class UsersUpdate extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/commands/views/open.ts b/packages/cli/src/commands/views/open.ts index 2a874b6b2..b266897cd 100644 --- a/packages/cli/src/commands/views/open.ts +++ b/packages/cli/src/commands/views/open.ts @@ -7,9 +7,9 @@ export default class ViewsOpen extends BaseCommand { static override description = "Открытие представления"; static override examples = [ - "Показать интерактивную форму пользователю:\n $ pachca views open", - "Опрос сотрудников через форму:\n $ pachca views open", - "Форма заявки/запроса:\n $ pachca views open" + "Показать интерактивную форму пользователю — Немедленно открой форму:\n $ pachca views open", + "Опрос сотрудников через форму — Открой форму с полями опроса:\n $ pachca views open", + "Форма заявки/запроса — При нажатии открой форму с полями: тема, описание, приоритет:\n $ pachca views open" ]; static scope = "views:write"; @@ -124,7 +124,7 @@ export default class ViewsOpen extends BaseCommand { body, }); - const responseBody = data as Record; + const responseBody = (data ?? {}) as Record; const result = responseBody.data ?? responseBody; this.output(result); } diff --git a/packages/cli/src/data/changelog.json b/packages/cli/src/data/changelog.json index c8227c224..1887cd5a6 100644 --- a/packages/cli/src/data/changelog.json +++ b/packages/cli/src/data/changelog.json @@ -1,4 +1,55 @@ [ + { + "version": "2026.7.2", + "date": "27 июля 2026", + "changes": [ + { + "type": "-", + "command": "files direct-url", + "description": "Файл теперь добавляется в форму последним — S3 игнорирует поля после файла, из-за чего загрузка отклонялась с 400" + }, + { + "type": "-", + "command": "", + "description": "Явный `--profile` больше не перебивается переменной `PACHCA_TOKEN` — команда с указанным профилем не уйдёт в чужое пространство" + }, + { + "type": "-", + "command": "", + "description": "Запись (`POST`/`DELETE`/`PATCH`) больше не повторяется автоматически при 503 — повтор мог создать дубль сообщения" + }, + { + "type": "-", + "command": "", + "description": "`Retry-After` в формате даты больше не игнорируется, значение ограничено разумным пределом" + }, + { + "type": "-", + "command": "chats download-export", + "description": "Имя файла из `Content-Disposition` больше не может увести запись за пределы указанной папки" + }, + { + "type": "-", + "command": "", + "description": "Вывод `-o csv`: ячейки, начинающиеся с `=`, `+`, `-` или `@`, экранируются; объекты и массивы выводятся как JSON, а не `[object Object]`" + }, + { + "type": "-", + "command": "", + "description": "`--timeout` меньше 1 отклоняется, а не приводит к мгновенной отмене запроса" + }, + { + "type": "-", + "command": "", + "description": "Примеры в `--help` подписаны шагом сценария, а не общим заголовком (`reactions remove` больше не подписан «Добавить реакцию»)" + }, + { + "type": "-", + "command": "files direct-url", + "description": "Команда больше не падает с TypeError при успешной загрузке: S3 отвечает 204 с пустым телом, а команда пыталась прочитать из него поле" + } + ] + }, { "version": "2026.7.1", "date": "24 июля 2026", diff --git a/packages/cli/src/data/commands.json b/packages/cli/src/data/commands.json index 89cc86fc1..a6ba4aa12 100644 --- a/packages/cli/src/data/commands.json +++ b/packages/cli/src/data/commands.json @@ -171,7 +171,7 @@ "name": "scopes", "type": "option", "required": false, - "description": "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию." + "description": "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя." }, { "name": "template", @@ -433,7 +433,7 @@ "name": "scopes", "type": "option", "required": false, - "description": "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию." + "description": "Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя." }, { "name": "template", @@ -1586,7 +1586,7 @@ "name": "link-previews", "type": "option", "required": true, - "description": "`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении." + "description": "`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении" } ] }, @@ -2192,7 +2192,7 @@ "name": "end-time", "type": "option", "required": false, - "description": "Конечная метка времени (исключительно)" + "description": "Конечная метка времени (включительно)" }, { "name": "event-key", @@ -2323,7 +2323,7 @@ "name": "priority", "type": "option", "required": false, - "description": "Приоритет: 1, 2 (важно) или 3 (очень важно)." + "description": "Приоритет: 1, 2 (важно) или 3 (очень важно)" }, { "name": "performer-ids", @@ -2455,7 +2455,7 @@ "name": "priority", "type": "option", "required": false, - "description": "Приоритет: 1, 2 (важно) или 3 (очень важно)." + "description": "Приоритет: 1, 2 (важно) или 3 (очень важно)" }, { "name": "performer-ids", diff --git a/packages/cli/src/data/endpoints.json b/packages/cli/src/data/endpoints.json index 63e84dcff..1950f087f 100644 --- a/packages/cli/src/data/endpoints.json +++ b/packages/cli/src/data/endpoints.json @@ -1 +1 @@ -[{"method":"GET","path":"/audit_events","summary":"Журнал аудита событий","scope":"audit_events:read","plan":"corporation","auth":true,"paginated":true,"command":"pachca security list","docLink":"https://dev.pachca.com/api/security/list","describe":"# GET /audit_events — Журнал аудита событий\n\n> **Скоуп:** `audit_events:read`\n\n> **Тариф:** Корпорация\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `start_time` — query: Начальная метка времени (включительно)\n- `end_time` — query: Конечная метка времени (исключительно)\n- `event_key` — query: Фильтр по конкретному типу события\n- `actor_id` — query: Идентификатор пользователя, выполнившего действие\n- `actor_type` — query: Тип актора\n- `entity_id` — query: Идентификатор затронутой сущности\n- `entity_type` — query: Тип сущности\n- `limit` — query: Количество записей для возврата\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca security list \\\n --start-time=2025-05-01T09:11:00Z \\\n --end-time=2025-05-02T09:11:00Z \\\n --event-key=user_login \\\n --actor-id=98765 \\\n --actor-type=User \\\n --entity-id=98765 \\\n --entity-type=User \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/security/list\nПолная справка: `pachca api GET /audit_events --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/audit_events","description":"Журнал аудита событий\n\nМетод для получения логов событий на основе указанных фильтров.","parameters":[{"name":"start_time","in":"query","description":"Начальная метка времени (включительно)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-05-01T09:11:00Z"},"example":"2025-05-01T09:11:00Z","explode":false},{"name":"end_time","in":"query","description":"Конечная метка времени (исключительно)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-05-02T09:11:00Z"},"example":"2025-05-02T09:11:00Z","explode":false},{"name":"event_key","in":"query","description":"Фильтр по конкретному типу события","required":false,"schema":{"type":"string","description":"Тип аудит-события","enum":["user_login","user_logout","user_2fa_fail","user_2fa_success","user_created","user_deleted","user_role_changed","user_updated","tag_created","tag_deleted","user_added_to_tag","user_removed_from_tag","chat_created","chat_renamed","chat_permission_changed","user_chat_join","user_chat_leave","tag_added_to_chat","tag_removed_from_chat","message_updated","message_deleted","message_created","reaction_created","reaction_deleted","thread_created","access_token_created","access_token_updated","access_token_destroy","kms_encrypt","kms_decrypt","audit_events_accessed","dlp_violation_detected","search_users_api","search_chats_api","search_messages_api","bot_scopes_updated","bot_webhook_settings_updated","bot_token_recreated","bot_deleted","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"user_login":"Пользователь успешно вошел в систему","user_logout":"Пользователь вышел из системы","user_2fa_fail":"Неудачная попытка двухфакторной аутентификации","user_2fa_success":"Успешная двухфакторная аутентификация","user_created":"Создана новая учетная запись пользователя","user_deleted":"Учетная запись пользователя удалена","user_role_changed":"Роль пользователя была изменена","user_updated":"Данные пользователя обновлены","tag_created":"Создан новый тег","tag_deleted":"Тег удален","user_added_to_tag":"Пользователь добавлен в тег","user_removed_from_tag":"Пользователь удален из тега","chat_created":"Создан новый чат","chat_renamed":"Чат переименован","chat_permission_changed":"Изменены права доступа к чату","user_chat_join":"Пользователь присоединился к чату","user_chat_leave":"Пользователь покинул чат","tag_added_to_chat":"Тег добавлен в чат","tag_removed_from_chat":"Тег удален из чата","message_updated":"Сообщение отредактировано","message_deleted":"Сообщение удалено","message_created":"Сообщение создано","reaction_created":"Реакция добавлена","reaction_deleted":"Реакция удалена","thread_created":"Тред создан","access_token_created":"Создан новый токен доступа","access_token_updated":"Токен доступа обновлен","access_token_destroy":"Токен доступа удален","kms_encrypt":"Данные зашифрованы","kms_decrypt":"Данные расшифрованы","audit_events_accessed":"Доступ к журналам аудита получен","dlp_violation_detected":"Срабатывание правила DLP-системы","search_users_api":"Поиск сотрудников через API","search_chats_api":"Поиск чатов через API","search_messages_api":"Поиск сообщений через API","bot_scopes_updated":"Изменены скоупы токена бота","bot_webhook_settings_updated":"Изменены настройки исходящего вебхука бота","bot_token_recreated":"Токен бота перевыпущен (ротация)","bot_deleted":"Бот удалён","video_call_started":"Видеозвонок начат","video_call_finished":"Видеозвонок завершён","video_call_recording_ready":"Запись видеозвонка готова"},"example":"user_login","$ref":"#/components/schemas/AuditEventKey"},"example":"user_login","explode":false},{"name":"actor_id","in":"query","description":"Идентификатор пользователя, выполнившего действие","required":false,"schema":{"type":"string","example":"98765"},"example":"98765","explode":false},{"name":"actor_type","in":"query","description":"Тип актора","required":false,"schema":{"type":"string","example":"User"},"example":"User","explode":false},{"name":"entity_id","in":"query","description":"Идентификатор затронутой сущности","required":false,"schema":{"type":"string","example":"98765"},"example":"98765","explode":false},{"name":"entity_type","in":"query","description":"Тип сущности","required":false,"schema":{"type":"string","example":"User"},"example":"User","explode":false},{"name":"limit","in":"query","description":"Количество записей для возврата","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Событие аудита","required":["id","created_at","event_key","entity_id","entity_type","actor_id","actor_type","details","ip_address","user_agent"],"properties":{"id":{"type":"string","description":"Уникальный идентификатор события","example":"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14"},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"event_key":{"description":"Ключ типа события","example":"user_login","allOf":[{"type":"string","description":"Тип аудит-события","enum":["user_login","user_logout","user_2fa_fail","user_2fa_success","user_created","user_deleted","user_role_changed","user_updated","tag_created","tag_deleted","user_added_to_tag","user_removed_from_tag","chat_created","chat_renamed","chat_permission_changed","user_chat_join","user_chat_leave","tag_added_to_chat","tag_removed_from_chat","message_updated","message_deleted","message_created","reaction_created","reaction_deleted","thread_created","access_token_created","access_token_updated","access_token_destroy","kms_encrypt","kms_decrypt","audit_events_accessed","dlp_violation_detected","search_users_api","search_chats_api","search_messages_api","bot_scopes_updated","bot_webhook_settings_updated","bot_token_recreated","bot_deleted","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"user_login":"Пользователь успешно вошел в систему","user_logout":"Пользователь вышел из системы","user_2fa_fail":"Неудачная попытка двухфакторной аутентификации","user_2fa_success":"Успешная двухфакторная аутентификация","user_created":"Создана новая учетная запись пользователя","user_deleted":"Учетная запись пользователя удалена","user_role_changed":"Роль пользователя была изменена","user_updated":"Данные пользователя обновлены","tag_created":"Создан новый тег","tag_deleted":"Тег удален","user_added_to_tag":"Пользователь добавлен в тег","user_removed_from_tag":"Пользователь удален из тега","chat_created":"Создан новый чат","chat_renamed":"Чат переименован","chat_permission_changed":"Изменены права доступа к чату","user_chat_join":"Пользователь присоединился к чату","user_chat_leave":"Пользователь покинул чат","tag_added_to_chat":"Тег добавлен в чат","tag_removed_from_chat":"Тег удален из чата","message_updated":"Сообщение отредактировано","message_deleted":"Сообщение удалено","message_created":"Сообщение создано","reaction_created":"Реакция добавлена","reaction_deleted":"Реакция удалена","thread_created":"Тред создан","access_token_created":"Создан новый токен доступа","access_token_updated":"Токен доступа обновлен","access_token_destroy":"Токен доступа удален","kms_encrypt":"Данные зашифрованы","kms_decrypt":"Данные расшифрованы","audit_events_accessed":"Доступ к журналам аудита получен","dlp_violation_detected":"Срабатывание правила DLP-системы","search_users_api":"Поиск сотрудников через API","search_chats_api":"Поиск чатов через API","search_messages_api":"Поиск сообщений через API","bot_scopes_updated":"Изменены скоупы токена бота","bot_webhook_settings_updated":"Изменены настройки исходящего вебхука бота","bot_token_recreated":"Токен бота перевыпущен (ротация)","bot_deleted":"Бот удалён","video_call_started":"Видеозвонок начат","video_call_finished":"Видеозвонок завершён","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/AuditEventKey"}]},"entity_id":{"type":"string","description":"Идентификатор затронутой сущности","example":"98765"},"entity_type":{"type":"string","description":"Тип затронутой сущности","example":"User"},"actor_id":{"type":"string","description":"Идентификатор пользователя, выполнившего действие","example":"98765"},"actor_type":{"type":"string","description":"Тип актора","example":"User"},"details":{"description":"Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект","allOf":[{"description":"Дополнительные детали события аудита. Структура зависит от значения event_key","anyOf":[{"type":"object","description":"Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted","$ref":"#/components/schemas/AuditDetailsEmpty"},{"type":"object","description":"При: user_updated","required":["changed_attrs"],"properties":{"changed_attrs":{"type":"array","description":"Список изменённых полей","items":{"type":"string"}}},"$ref":"#/components/schemas/AuditDetailsUserUpdated"},{"type":"object","description":"При: user_role_changed","required":["new_company_role","previous_company_role","initiator_id"],"properties":{"new_company_role":{"type":"string","description":"Новая роль"},"previous_company_role":{"type":"string","description":"Предыдущая роль"},"initiator_id":{"type":"integer","format":"int32","description":"Идентификатор инициатора"}},"$ref":"#/components/schemas/AuditDetailsRoleChanged"},{"type":"object","description":"При: tag_created, tag_deleted","required":["name"],"properties":{"name":{"type":"string","description":"Название тега"}},"$ref":"#/components/schemas/AuditDetailsTagName"},{"type":"object","description":"При: user_added_to_tag, user_removed_from_tag, user_chat_leave","required":["initiator_id"],"properties":{"initiator_id":{"type":"integer","format":"int32","description":"Идентификатор инициатора действия"}},"$ref":"#/components/schemas/AuditDetailsInitiator"},{"type":"object","description":"При: user_chat_join","required":["inviter_id"],"properties":{"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор пригласившего"}},"$ref":"#/components/schemas/AuditDetailsInviter"},{"type":"object","description":"При: chat_renamed","required":["old_name","new_name"],"properties":{"old_name":{"type":"string","description":"Прежнее название чата"},"new_name":{"type":"string","description":"Новое название чата"}},"$ref":"#/components/schemas/AuditDetailsChatRenamed"},{"type":"object","description":"При: chat_permission_changed","required":["public_access"],"properties":{"public_access":{"type":"boolean","description":"Публичный доступ"}},"$ref":"#/components/schemas/AuditDetailsChatPermission"},{"type":"object","description":"При: tag_added_to_chat","required":["chat_id","tag_name"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"},"tag_name":{"type":"string","description":"Название тега"}},"$ref":"#/components/schemas/AuditDetailsTagChat"},{"type":"object","description":"При: tag_removed_from_chat","required":["chat_id"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"}},"$ref":"#/components/schemas/AuditDetailsChatId"},{"type":"object","description":"При: access_token_created, access_token_updated, access_token_destroy","required":["scopes"],"properties":{"scopes":{"type":"array","description":"Скоупы токена","items":{"type":"string"}}},"$ref":"#/components/schemas/AuditDetailsTokenScopes"},{"type":"object","description":"При: kms_encrypt, kms_decrypt","required":["chat_id","message_id","reason"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения"},"reason":{"type":"string","description":"Причина операции"}},"$ref":"#/components/schemas/AuditDetailsKms"},{"type":"object","description":"При: dlp_violation_detected","required":["dlp_rule_id","dlp_rule_name","message_id","chat_id","user_id","action_message","conditions_matched"],"properties":{"dlp_rule_id":{"type":"integer","format":"int32","description":"Идентификатор правила DLP"},"dlp_rule_name":{"type":"string","description":"Название правила DLP"},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения"},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя"},"action_message":{"type":"string","description":"Описание действия. `null`, если у действия правила текст не задан.","nullable":true},"conditions_matched":{"type":"boolean","description":"Результат проверки условий правила (true — условия сработали)"}},"$ref":"#/components/schemas/AuditDetailsDlp"},{"type":"object","description":"При: search_users_api, search_chats_api, search_messages_api","required":["search_type","query_present","cursor_present","limit","filters"],"properties":{"search_type":{"type":"string","description":"Тип поиска"},"query_present":{"type":"boolean","description":"Указан ли поисковый запрос"},"cursor_present":{"type":"boolean","description":"Использован ли курсор"},"limit":{"type":"integer","format":"int32","description":"Количество возвращённых результатов"},"filters":{"type":"object","description":"Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages)","additionalProperties":{}}},"$ref":"#/components/schemas/AuditDetailsSearch"},{"type":"object","description":"При: bot_scopes_updated","required":["added_scopes","removed_scopes"],"properties":{"added_scopes":{"type":"array","description":"Скоупы, добавленные токену бота","items":{"type":"string"}},"removed_scopes":{"type":"array","description":"Скоупы, отозванные у токена бота","items":{"type":"string"}}},"$ref":"#/components/schemas/AuditDetailsBotScopes"},{"type":"object","description":"При: bot_webhook_settings_updated","required":["changes"],"properties":{"changes":{"type":"object","description":"Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение)","additionalProperties":{}}},"$ref":"#/components/schemas/AuditDetailsBotWebhookSettings"},{"type":"object","description":"При: video_call_started, video_call_finished","required":["chat_id","duration","max_members_count"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором проходит видеозвонок"},"duration":{"type":"integer","format":"int32","description":"Длительность звонка в секундах на момент события. Для video_call_started равна 0."},"max_members_count":{"type":"integer","format":"int32","description":"Максимальное число одновременных участников за время звонка"}},"$ref":"#/components/schemas/AuditDetailsVideoCall"},{"type":"object","description":"При: video_call_recording_ready","required":["chat_id","duration","size"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором проходил видеозвонок"},"duration":{"type":"integer","format":"int32","description":"Длительность записи в секундах"},"size":{"type":"integer","format":"int64","description":"Размер файла записи в байтах"}},"$ref":"#/components/schemas/AuditDetailsVideoCallRecording"}],"$ref":"#/components/schemas/AuditEventDetailsUnion"}]},"ip_address":{"type":"string","description":"IP-адрес, с которого было выполнено действие","example":"192.168.1.100"},"user_agent":{"type":"string","description":"User agent клиента","example":"Pachca/3.60.0 (co.staply.pachca; build:15; iOS 18.5.0) Alamofire/5.0.0"}},"$ref":"#/components/schemas/AuditEvent"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"audit_events:read","plan":"corporation","scopeRoles":["owner"]},"paginated":true},"docs":"# Журнал аудита событий\n\n**Метод**: `GET`\n\n**Путь**: `/audit_events`\n\n> **Скоуп:** `audit_events:read`\n\n> **Внимание:** Доступно только на тарифе **Корпорация**\n\nМетод для получения логов событий на основе указанных фильтров.\n\n## Параметры\n\n### Query параметры\n\n- `start_time: date-time` — Начальная метка времени (включительно)\n- `end_time: date-time` — Конечная метка времени (исключительно)\n- `event_key: string` — Фильтр по конкретному типу события\n Значения: `user_login`, `user_logout`, `user_2fa_fail`, `user_2fa_success`, `user_created`, `user_deleted`, `user_role_changed`, `user_updated`, `tag_created`, `tag_deleted`, `user_added_to_tag`, `user_removed_from_tag`, `chat_created`, `chat_renamed`, `chat_permission_changed`, `user_chat_join`, `user_chat_leave`, `tag_added_to_chat`, `tag_removed_from_chat`, `message_updated`, `message_deleted`, `message_created`, `reaction_created`, `reaction_deleted`, `thread_created`, `access_token_created`, `access_token_updated`, `access_token_destroy`, `kms_encrypt`, `kms_decrypt`, `audit_events_accessed`, `dlp_violation_detected`, `search_users_api`, `search_chats_api`, `search_messages_api`, `bot_scopes_updated`, `bot_webhook_settings_updated`, `bot_token_recreated`, `bot_deleted`, `video_call_started`, `video_call_finished`, `video_call_recording_ready`\n- `actor_id: string` — Идентификатор пользователя, выполнившего действие\n- `actor_type: string` — Тип актора\n- `entity_id: string` — Идентификатор затронутой сущности\n- `entity_type: string` — Тип сущности\n- `limit: integer, int32` (default: 50) — Количество записей для возврата\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09:11:00Z&end_time=2025-05-02T09:11:00Z&event_key=user_login&actor_id=98765&actor_type=User&entity_id=98765&entity_type=User&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: string` (required) — Уникальный идентификатор события. Пример: `\"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14\"`\n - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `event_key: string` (required) — Ключ типа события\n Значения: `user_login` — Пользователь успешно вошел в систему, `user_logout` — Пользователь вышел из системы, `user_2fa_fail` — Неудачная попытка двухфакторной аутентификации, `user_2fa_success` — Успешная двухфакторная аутентификация, `user_created` — Создана новая учетная запись пользователя, `user_deleted` — Учетная запись пользователя удалена, `user_role_changed` — Роль пользователя была изменена, `user_updated` — Данные пользователя обновлены, `tag_created` — Создан новый тег, `tag_deleted` — Тег удален, `user_added_to_tag` — Пользователь добавлен в тег, `user_removed_from_tag` — Пользователь удален из тега, `chat_created` — Создан новый чат, `chat_renamed` — Чат переименован, `chat_permission_changed` — Изменены права доступа к чату, `user_chat_join` — Пользователь присоединился к чату, `user_chat_leave` — Пользователь покинул чат, `tag_added_to_chat` — Тег добавлен в чат, `tag_removed_from_chat` — Тег удален из чата, `message_updated` — Сообщение отредактировано, `message_deleted` — Сообщение удалено, `message_created` — Сообщение создано, `reaction_created` — Реакция добавлена, `reaction_deleted` — Реакция удалена, `thread_created` — Тред создан, `access_token_created` — Создан новый токен доступа, `access_token_updated` — Токен доступа обновлен, `access_token_destroy` — Токен доступа удален, `kms_encrypt` — Данные зашифрованы, `kms_decrypt` — Данные расшифрованы, `audit_events_accessed` — Доступ к журналам аудита получен, `dlp_violation_detected` — Срабатывание правила DLP-системы, `search_users_api` — Поиск сотрудников через API, `search_chats_api` — Поиск чатов через API, `search_messages_api` — Поиск сообщений через API, `bot_scopes_updated` — Изменены скоупы токена бота, `bot_webhook_settings_updated` — Изменены настройки исходящего вебхука бота, `bot_token_recreated` — Токен бота перевыпущен (ротация), `bot_deleted` — Бот удалён, `video_call_started` — Видеозвонок начат, `video_call_finished` — Видеозвонок завершён, `video_call_recording_ready` — Запись видеозвонка готова\n - `entity_id: string` (required) — Идентификатор затронутой сущности. Пример: `\"98765\"`\n - `entity_type: string` (required) — Тип затронутой сущности. Пример: `\"User\"`\n - `actor_id: string` (required) — Идентификатор пользователя, выполнившего действие. Пример: `\"98765\"`\n - `actor_type: string` (required) — Тип актора. Пример: `\"User\"`\n - `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект\n **Возможные варианты:**\n\n - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted\n - **AuditDetailsUserUpdated**: При: user_updated\n - `changed_attrs: array of string` (required) — Список изменённых полей\n - **AuditDetailsRoleChanged**: При: user_role_changed\n - `new_company_role: string` (required) — Новая роль\n - `previous_company_role: string` (required) — Предыдущая роль\n - `initiator_id: integer, int32` (required) — Идентификатор инициатора\n - **AuditDetailsTagName**: При: tag_created, tag_deleted\n - `name: string` (required) — Название тега\n - **AuditDetailsInitiator**: При: user_added_to_tag, user_removed_from_tag, user_chat_leave\n - `initiator_id: integer, int32` (required) — Идентификатор инициатора действия\n - **AuditDetailsInviter**: При: user_chat_join\n - `inviter_id: integer, int32` (required) — Идентификатор пригласившего\n - **AuditDetailsChatRenamed**: При: chat_renamed\n - `old_name: string` (required) — Прежнее название чата\n - `new_name: string` (required) — Новое название чата\n - **AuditDetailsChatPermission**: При: chat_permission_changed\n - `public_access: boolean` (required) — Публичный доступ\n - **AuditDetailsTagChat**: При: tag_added_to_chat\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - `tag_name: string` (required) — Название тега\n - **AuditDetailsChatId**: При: tag_removed_from_chat\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - **AuditDetailsTokenScopes**: При: access_token_created, access_token_updated, access_token_destroy\n - `scopes: array of string` (required) — Скоупы токена\n - **AuditDetailsKms**: При: kms_encrypt, kms_decrypt\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - `message_id: integer, int32` (required) — Идентификатор сообщения\n - `reason: string` (required) — Причина операции\n - **AuditDetailsDlp**: При: dlp_violation_detected\n - `dlp_rule_id: integer, int32` (required) — Идентификатор правила DLP\n - `dlp_rule_name: string` (required) — Название правила DLP\n - `message_id: integer, int32` (required) — Идентификатор сообщения\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - `user_id: integer, int32` (required) — Идентификатор пользователя\n - `action_message: string` (required) — Описание действия. `null`, если у действия правила текст не задан.\n - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали)\n - **AuditDetailsSearch**: При: search_users_api, search_chats_api, search_messages_api\n - `search_type: string` (required) — Тип поиска\n - `query_present: boolean` (required) — Указан ли поисковый запрос\n - `cursor_present: boolean` (required) — Использован ли курсор\n - `limit: integer, int32` (required) — Количество возвращённых результатов\n - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages)\n **Структура значений Record:**\n - Тип значения: `any`\n - **AuditDetailsBotScopes**: При: bot_scopes_updated\n - `added_scopes: array of string` (required) — Скоупы, добавленные токену бота\n - `removed_scopes: array of string` (required) — Скоупы, отозванные у токена бота\n - **AuditDetailsBotWebhookSettings**: При: bot_webhook_settings_updated\n - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение)\n **Структура значений Record:**\n - Тип значения: `any`\n - **AuditDetailsVideoCall**: При: video_call_started, video_call_finished\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором проходит видеозвонок\n - `duration: integer, int32` (required) — Длительность звонка в секундах на момент события. Для video_call_started равна 0.\n - `max_members_count: integer, int32` (required) — Максимальное число одновременных участников за время звонка\n - **AuditDetailsVideoCallRecording**: При: video_call_recording_ready\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором проходил видеозвонок\n - `duration: integer, int32` (required) — Длительность записи в секундах\n - `size: integer, int64` (required) — Размер файла записи в байтах\n - `ip_address: string` (required) — IP-адрес, с которого было выполнено действие. Пример: `\"192.168.1.100\"`\n - `user_agent: string` (required) — User agent клиента. Пример: `\"Pachca/3.60.0 (co.staply.pachca; build:15; iOS 18.5.0) Alamofire/5.0.0\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": \"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14\",\n \"created_at\": \"2025-05-15T14:30:00.000Z\",\n \"event_key\": \"user_login\",\n \"entity_id\": \"98765\",\n \"entity_type\": \"User\",\n \"actor_id\": \"98765\",\n \"actor_type\": \"User\",\n \"details\": null,\n \"ip_address\": \"192.168.1.100\",\n \"user_agent\": \"Pachca/3.60.0 (co.staply.pachca; build:15; iOS 18.5.0) Alamofire/5.0.0\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/bot/recreate_token","summary":"Ротация собственного токена бота","scope":"bot_self:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots recreate-token-self","docLink":"https://dev.pachca.com/api/bots/recreate-token-self","describe":"# POST /bot/recreate_token — Ротация собственного токена бота\n\n> **Скоуп:** `bot_self:write`\n\n## Эквивалентная команда\n\n```bash\npachca bots recreate-token-self \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/recreate-token-self\nПолная справка: `pachca api POST /bot/recreate_token --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/bot/recreate_token","description":"Ротация собственного токена бота\n\nМетод позволяет боту сгенерировать себе новый `access_token` своим же токеном — без участия администратора и без знания собственного `id`. Ротируется токен того бота, которому принадлежит токен запроса.\n\nТокен, которым выполнен запрос, инвалидируется сразу. Новый токен возвращается в ответе один раз — обязательно сохраните его, иначе бот потеряет доступ к API.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры созданного бота","required":["id","webhook","access_token"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]},"access_token":{"type":"string","description":"Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.","example":"bm90X2FfcmVhbF90b2tlbg"}},"$ref":"#/components/schemas/BotCreateResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"},"access_token":"bm90X2FfcmVhbF90b2tlbg"}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bot_self:write","scopeRoles":["bot"]},"paginated":false},"docs":"# Ротация собственного токена бота\n\n**Метод**: `POST`\n\n**Путь**: `/bot/recreate_token`\n\n> **Скоуп:** `bot_self:write`\n\nМетод позволяет боту сгенерировать себе новый `access_token` своим же токеном — без участия администратора и без знания собственного `id`. Ротируется токен того бота, которому принадлежит токен запроса.\n\nТокен, которым выполнен запрос, инвалидируется сразу. Новый токен возвращается в ответе один раз — обязательно сохраните его, иначе бот потеряет доступ к API.\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/bot/recreate_token\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры созданного бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `[\"messages:create\"]`\n - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `\"bm90X2FfcmVhbF90b2tlbg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n },\n \"access_token\": \"bm90X2FfcmVhbF90b2tlbg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/bot/webhook","summary":"Саморегистрация вебхука бота","scope":"bot_self:webhook:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots update-webhook","docLink":"https://dev.pachca.com/api/bots/update-webhook","describe":"# PUT /bot/webhook — Саморегистрация вебхука бота\n\n> **Скоуп:** `bot_self:webhook:write`\n\n## Тело запроса\n\n- `webhook: object` (required) — Объект параметров вебхука\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук.\n\n## Эквивалентная команда\n\n```bash\npachca bots update-webhook \\\n --outgoing-url=https://www.website.com/tasks/new \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/update-webhook\nПолная справка: `pachca api PUT /bot/webhook --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/bot/webhook","description":"Саморегистрация вебхука бота\n\nМетод позволяет боту самостоятельно изменить `URL` своего исходящего вебхука своим же токеном — без участия администратора и без знания собственного `id`. Меняется вебхук того бота, которому принадлежит токен. Чтобы отключить вебхук, передайте пустую строку в `outgoing_url`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на саморегистрацию вебхука бота","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Объект параметров вебхука","required":["outgoing_url"],"properties":{"outgoing_url":{"type":"string","description":"URL исходящего вебхука. Пустая строка отключает вебхук.","example":"https://www.website.com/tasks/new"}}}},"$ref":"#/components/schemas/BotWebhookSelfUpdateRequest"},"example":{"webhook":{"outgoing_url":"https://www.website.com/tasks/new"}}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bot_self:webhook:write","scopeRoles":["bot"]},"paginated":false},"docs":"# Саморегистрация вебхука бота\n\n**Метод**: `PUT`\n\n**Путь**: `/bot/webhook`\n\n> **Скоуп:** `bot_self:webhook:write`\n\nМетод позволяет боту самостоятельно изменить `URL` своего исходящего вебхука своим же токеном — без участия администратора и без знания собственного `id`. Меняется вебхук того бота, которому принадлежит токен. Чтобы отключить вебхук, передайте пустую строку в `outgoing_url`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `webhook: object` (required) — Объект параметров вебхука\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук.. Пример: `\"https://www.website.com/tasks/new\"`\n\n### Пример\n\n```json\n{\n \"webhook\": {\n \"outgoing_url\": \"https://www.website.com/tasks/new\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/bot/webhook\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"webhook\": {\n \"outgoing_url\": \"https://www.website.com/tasks/new\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `[\"messages:create\"]`\n - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/bots","summary":"Список ботов","scope":"bots:read","plan":null,"auth":true,"paginated":true,"command":"pachca bots list","docLink":"https://dev.pachca.com/api/bots/list","describe":"# GET /bots — Список ботов\n\n> **Скоуп:** `bots:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Поисковая фраза для фильтрации ботов по имени\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca bots list \\\n --query=задач \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/list\nПолная справка: `pachca api GET /bots --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/bots","description":"Список ботов\n\nМетод для получения списка ботов. Возвращаются только боты, доступные вам для редактирования: созданные вами и те, чьи настройки открывают вам доступ к редактированию.","parameters":[{"name":"query","in":"query","description":"Поисковая фраза для фильтрации ботов по имени","required":false,"schema":{"type":"string","example":"задач"},"example":"задач","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTczODgxNn0"},"example":"eyJpZCI6MTczODgxNn0","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}},"example":{"data":[{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"}}],"meta":{"paginate":{"next_page":"eyJpZCI6MTczODgxNn0"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"bots:read","scopeRoles":["owner","admin","user"]},"paginated":true},"docs":"# Список ботов\n\n**Метод**: `GET`\n\n**Путь**: `/bots`\n\n> **Скоуп:** `bots:read`\n\nМетод для получения списка ботов. Возвращаются только боты, доступные вам для редактирования: созданные вами и те, чьи настройки открывают вам доступ к редактированию.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Поисковая фраза для фильтрации ботов по имени\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `[\"messages:create\"]`\n - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"POST","path":"/bots","summary":"Новый бот","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots create","docLink":"https://dev.pachca.com/api/bots/create","describe":"# POST /bots — Новый бот\n\n> **Скоуп:** `bots:write`\n\n## Тело запроса\n\n- `webhook: object` (required) — Объект параметров вебхука создаваемого бота\n - `name: string` (required, max length: 255) — Имя бота\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.\n - `outgoing_url: string` — URL исходящего вебхука\n - `events: array of string` — События, на которые подписан бот\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.\n - `template: string` — Шаблон форматирования входящего вебхука\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.\n - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.\n\n## Эквивалентная команда\n\n```bash\npachca bots create \\\n --name=\"Бот задач\" \\\n --nickname=tasks_bot \\\n --outgoing-url=https://www.website.com/tasks/new \\\n --events=message_new \\\n --commands=/task,/help \\\n --scopes=messages:create \\\n --template=\"Заказ от {{ client }} на сумму {{ amount }} ₽\" \\\n --challenge-key=challenge \\\n --can-edit=admin \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/create\nПолная справка: `pachca api POST /bots --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/bots","description":"Новый бот\n\nМетод для создания бота и получения его `access_token`.\n\nПри создании вы получите `access_token` бота — сразу сохраните его. Повторно получить токен вы сможете только через интерфейс (вкладка «API» настроек бота).","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание бота","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Объект параметров вебхука создаваемого бота","required":["name"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота. Должен заканчиваться на `_bot`.","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new"},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","default":"commands","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","example":["/task","/help"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука","example":"Заказ от {{ client }} на сумму {{ amount }} ₽"},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","default":"liquid","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука","example":"challenge"},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","default":true,"example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","default":false,"example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","default":false,"example":false},"who_can_add":{"description":"Кто может добавлять бота в чаты","default":"creator","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.","default":false,"example":false}}}},"$ref":"#/components/schemas/BotCreateRequest"},"example":{"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"]}}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры созданного бота","required":["id","webhook","access_token"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]},"access_token":{"type":"string","description":"Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.","example":"bm90X2FfcmVhbF90b2tlbg"}},"$ref":"#/components/schemas/BotCreateResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"},"access_token":"bm90X2FfcmVhbF90b2tlbg"}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Новый бот\n\n**Метод**: `POST`\n\n**Путь**: `/bots`\n\n> **Скоуп:** `bots:write`\n\nМетод для создания бота и получения его `access_token`.\n\nПри создании вы получите `access_token` бота — сразу сохраните его. Повторно получить токен вы сможете только через интерфейс (вкладка «API» настроек бота).\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `webhook: object` (required) — Объект параметров вебхука создаваемого бота\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.. Пример: `[\"/task\",\"/help\"]`\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.. Пример: `[\"messages:create\"]`\n - `template: string` — Шаблон форматирования входящего вебхука. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.. Пример: `false`\n\n### Пример\n\n```json\n{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"commands\": [\n \"/task\",\n \"/help\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"challenge_key\": \"challenge\",\n \"can_edit\": [\n \"admin\"\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/bots\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"commands\": [\n \"/task\",\n \"/help\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"challenge_key\": \"challenge\",\n \"can_edit\": [\n \"admin\"\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры созданного бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `[\"messages:create\"]`\n - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `\"bm90X2FfcmVhbF90b2tlbg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n },\n \"access_token\": \"bm90X2FfcmVhbF90b2tlbg\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/bots/{id}","summary":"Информация о боте","scope":"bots:read","plan":null,"auth":true,"paginated":false,"command":"pachca bots get","docLink":"https://dev.pachca.com/api/bots/get","describe":"# GET /bots/{id} — Информация о боте\n\n> **Скоуп:** `bots:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Эквивалентная команда\n\n```bash\npachca bots get 1738816 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/get\nПолная справка: `pachca api GET /bots/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/bots/{id}","description":"Информация о боте\n\nМетод для получения параметров бота по его `id`.","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:read","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Информация о боте\n\n**Метод**: `GET`\n\n**Путь**: `/bots/{id}`\n\n> **Скоуп:** `bots:read`\n\nМетод для получения параметров бота по его `id`.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/bots/1738816\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `[\"messages:create\"]`\n - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/bots/{id}","summary":"Редактирование бота","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots update","docLink":"https://dev.pachca.com/api/bots/update","describe":"# PUT /bots/{id} — Редактирование бота\n\n> **Скоуп:** `bots:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Тело запроса\n\n- `webhook: object` (required) — Объект параметров вебхука редактируемого бота\n - `name: string` (max length: 255) — Имя бота\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.\n - `outgoing_url: string` — URL исходящего вебхука\n - `events: array of string` — События, на которые подписан бот\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.\n - `template: string` — Шаблон форматирования входящего вебхука\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.\n\n## Эквивалентная команда\n\n```bash\npachca bots update 1738816 \\\n --name=\"Бот задач\" \\\n --nickname=tasks_bot \\\n --outgoing-url=https://www.website.com/tasks/new \\\n --events=message_new \\\n --commands=/task,/help \\\n --scopes=messages:create \\\n --template=\"Заказ от {{ client }} на сумму {{ amount }} ₽\" \\\n --challenge-key=challenge \\\n --can-edit=admin \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/update\nПолная справка: `pachca api PUT /bots/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/bots/{id}","description":"Редактирование бота\n\nМетод для редактирования бота.\n\nДля редактирования бота вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры бота указываются в теле запроса.\n\nВы не можете редактировать бота, настройки которого вам недоступны (поле «Кто может редактировать настройки бота» находится во вкладке «Основное» в настройках бота).","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на обновление бота","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Объект параметров вебхука редактируемого бота","properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота. Должен заканчиваться на `_bot`.","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new"},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","default":"commands","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","example":["/task","/help"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука","example":"Заказ от {{ client }} на сумму {{ amount }} ₽"},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","default":"liquid","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука","example":"challenge"},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","default":true,"example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","default":false,"example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","default":false,"example":false},"who_can_add":{"description":"Кто может добавлять бота в чаты","default":"creator","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}}}}},"$ref":"#/components/schemas/BotUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Редактирование бота\n\n**Метод**: `PUT`\n\n**Путь**: `/bots/{id}`\n\n> **Скоуп:** `bots:write`\n\nМетод для редактирования бота.\n\nДля редактирования бота вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры бота указываются в теле запроса.\n\nВы не можете редактировать бота, настройки которого вам недоступны (поле «Кто может редактировать настройки бота» находится во вкладке «Основное» в настройках бота).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `webhook: object` (required) — Объект параметров вебхука редактируемого бота\n - `name: string` (max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.. Пример: `[\"/task\",\"/help\"]`\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.. Пример: `[\"messages:create\"]`\n - `template: string` — Шаблон форматирования входящего вебхука. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n\n### Пример\n\n```json\n{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"commands\": [\n \"/task\",\n \"/help\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"challenge_key\": \"challenge\",\n \"can_edit\": [\n \"admin\"\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/bots/1738816\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"commands\": [\n \"/task\",\n \"/help\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"challenge_key\": \"challenge\",\n \"can_edit\": [\n \"admin\"\n ]\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `[\"messages:create\"]`\n - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/bots/{id}","summary":"Удаление бота","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots delete","docLink":"https://dev.pachca.com/api/bots/delete","describe":"# DELETE /bots/{id} — Удаление бота\n\n> **Скоуп:** `bots:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Эквивалентная команда\n\n```bash\npachca bots delete 1738816 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/delete\nПолная справка: `pachca api DELETE /bots/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/bots/{id}","description":"Удаление бота\n\nМетод для удаления бота. Прежний `access_token` бота сразу инвалидируется, бот исключается из всех чатов, его исходящий вебхук удаляется.\n\nУдаление доступно создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Владельцы и администраторы чатов удалять бота не могут, даже если им разрешено его редактировать.\n\nДля удаления бота вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Удаление бота\n\n**Метод**: `DELETE`\n\n**Путь**: `/bots/{id}`\n\n> **Скоуп:** `bots:write`\n\nМетод для удаления бота. Прежний `access_token` бота сразу инвалидируется, бот исключается из всех чатов, его исходящий вебхук удаляется.\n\nУдаление доступно создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Владельцы и администраторы чатов удалять бота не могут, даже если им разрешено его редактировать.\n\nДля удаления бота вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/bots/1738816\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/bots/{id}/recreate_token","summary":"Ротация токена бота","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots recreate-token","docLink":"https://dev.pachca.com/api/bots/recreate-token","describe":"# POST /bots/{id}/recreate_token — Ротация токена бота\n\n> **Скоуп:** `bots:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Эквивалентная команда\n\n```bash\npachca bots recreate-token 1738816 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/recreate-token\nПолная справка: `pachca api POST /bots/{id}/recreate_token --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/bots/{id}/recreate_token","description":"Ротация токена бота\n\nМетод генерирует боту новый `access_token` и сразу инвалидирует прежний. Используйте его при компрометации токена или плановой ротации секрета в `CI`.\n\nРотация доступна создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Укажите `id` бота в `URL` запроса. Новый токен возвращается в ответе только один раз — сохраните его сразу.","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры созданного бота","required":["id","webhook","access_token"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]},"access_token":{"type":"string","description":"Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.","example":"bm90X2FfcmVhbF90b2tlbg"}},"$ref":"#/components/schemas/BotCreateResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"},"access_token":"bm90X2FfcmVhbF90b2tlbg"}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Ротация токена бота\n\n**Метод**: `POST`\n\n**Путь**: `/bots/{id}/recreate_token`\n\n> **Скоуп:** `bots:write`\n\nМетод генерирует боту новый `access_token` и сразу инвалидирует прежний. Используйте его при компрометации токена или плановой ротации секрета в `CI`.\n\nРотация доступна создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Укажите `id` бота в `URL` запроса. Новый токен возвращается в ответе только один раз — сохраните его сразу.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры созданного бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Пример: `[\"messages:create\"]`\n - `template: string` (required) — Шаблон форматирования входящего вебхука. `null`, если не задан.. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required) — Название поля проверки для верификации входящего вебхука. `null`, если не задано.. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.. Пример: `\"bm90X2FfcmVhbF90b2tlbg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n },\n \"access_token\": \"bm90X2FfcmVhbF90b2tlbg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats","summary":"Новый чат","scope":"chats:create","plan":null,"auth":true,"paginated":false,"command":"pachca chats create","docLink":"https://dev.pachca.com/api/chats/create","describe":"# POST /chats — Новый чат\n\n> **Скоуп:** `chats:create`\n\n## Тело запроса\n\n- `chat: object` (required) — Собранный объект параметров создаваемого чата\n - `name: string` (required, max length: 255) — Название\n - `member_ids: array of integer` — Массив идентификаторов пользователей, которые станут участниками\n - `group_tag_ids: array of integer` — Массив идентификаторов тегов, которые станут участниками\n - `channel: boolean` (default: false) — Является каналом\n - `public: boolean` (default: false) — Открытый доступ\n\n## Эквивалентная команда\n\n```bash\npachca chats create \\\n --name=\"🤿 aqua\" \\\n --member-ids=186,187 \\\n --group-tag-ids=86,18 \\\n --channel \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/create\nПолная справка: `pachca api POST /chats --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats","description":"Новый чат\n\nМетод для создания нового чата.\n\nДля создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](POST /messages).\n\nПри создании чата вы автоматически становитесь участником.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание чата","required":["chat"],"properties":{"chat":{"type":"object","description":"Собранный объект параметров создаваемого чата","required":["name"],"properties":{"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, которые станут участниками","example":[186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, которые станут участниками","example":[86,18],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","default":false,"example":true},"public":{"type":"boolean","description":"Открытый доступ","default":false,"example":false}}}},"$ref":"#/components/schemas/ChatCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый чат\n\n**Метод**: `POST`\n\n**Путь**: `/chats`\n\n> **Скоуп:** `chats:create`\n\nМетод для создания нового чата.\n\nДля создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](POST /messages).\n\nПри создании чата вы автоматически становитесь участником.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `chat: object` (required) — Собранный объект параметров создаваемого чата\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `member_ids: array of integer` — Массив идентификаторов пользователей, которые станут участниками. Пример: `[186,187]`\n - `group_tag_ids: array of integer` — Массив идентификаторов тегов, которые станут участниками. Пример: `[86,18]`\n - `channel: boolean` (default: false) — Является каналом. Пример: `true`\n - `public: boolean` (default: false) — Открытый доступ. Пример: `false`\n\n### Пример\n\n```json\n{\n \"chat\": {\n \"name\": \"🤿 aqua\",\n \"member_ids\": [\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 86,\n 18\n ],\n \"channel\": true\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"chat\": {\n \"name\": \"🤿 aqua\",\n \"member_ids\": [\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 86,\n 18\n ],\n \"channel\": true\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Чат\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats","summary":"Список чатов","scope":"chats:read","plan":null,"auth":true,"paginated":true,"command":"pachca chats list","docLink":"https://dev.pachca.com/api/chats/list","describe":"# GET /chats — Список чатов\n\n> **Скоуп:** `chats:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `sort` — query: Поле сортировки\n- `order` — query: Направление сортировки\n- `availability` — query: Параметр, который отвечает за доступность и выборку чатов для пользователя\n- `last_message_at_after` — query: Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before` — query: Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `personal` — query: Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca chats list \\\n --sort=id \\\n --order=desc \\\n --availability=is_member \\\n --last-message-at-after=2025-01-01T00:00:00.000Z \\\n --last-message-at-before=2025-02-01T00:00:00.000Z \\\n --no-personal \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/list\nПолная справка: `pachca api GET /chats --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats","description":"Список чатов\n\nМетод для получения списка чатов по заданным параметрам.","parameters":[{"name":"sort","in":"query","description":"Поле сортировки","required":false,"schema":{"default":"id","allOf":[{"type":"string","description":"Поле сортировки чатов","enum":["id","last_message_at"],"x-enum-descriptions":{"id":"По идентификатору чата","last_message_at":"По дате и времени создания последнего сообщения"},"$ref":"#/components/schemas/ChatSortField"}]},"example":"id","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"default":"desc","allOf":[{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"$ref":"#/components/schemas/SortOrder"}]},"example":"desc","explode":false},{"name":"availability","in":"query","description":"Параметр, который отвечает за доступность и выборку чатов для пользователя","required":false,"schema":{"default":"is_member","allOf":[{"type":"string","description":"Доступность чатов для пользователя","enum":["is_member","public"],"x-enum-descriptions":{"is_member":"Чаты, где пользователь является участником","public":"Все открытые чаты компании, вне зависимости от участия в них пользователя"},"$ref":"#/components/schemas/ChatAvailability"}]},"example":"is_member","explode":false},{"name":"last_message_at_after","in":"query","description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"last_message_at_before","in":"query","description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"personal","in":"query","description":"Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.","required":false,"schema":{"type":"boolean","example":false},"example":false,"explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список чатов\n\n**Метод**: `GET`\n\n**Путь**: `/chats`\n\n> **Скоуп:** `chats:read`\n\nМетод для получения списка чатов по заданным параметрам.\n\n## Параметры\n\n### Query параметры\n\n- `sort: string` (default: id) — Поле сортировки\n- `order: string` (default: desc) — Направление сортировки\n- `availability: string` (default: is_member) — Параметр, который отвечает за доступность и выборку чатов для пользователя\n- `last_message_at_after: date-time` — Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before: date-time` — Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `personal: boolean` — Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability=is_member&last_message_at_after=2025-01-01T00:00:00.000Z&last_message_at_before=2025-02-01T00:00:00.000Z&personal=false&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats/exports","summary":"Экспорт сообщений","scope":"chat_exports:write","plan":"corporation","auth":true,"paginated":false,"command":"pachca chats request-export","docLink":"https://dev.pachca.com/api/chats/request-export","describe":"# POST /chats/exports — Экспорт сообщений\n\n> **Скоуп:** `chat_exports:write`\n\n> **Тариф:** Корпорация\n\n## Тело запроса\n\n- `start_at: date` (required) — Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD\n- `end_at: date` (required) — Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD\n- `webhook_url: string` (required) — Адрес, на который будет отправлен вебхук по завершению экспорта\n- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.\n- `skip_chats_file: boolean` (default: false) — Пропуск формирования файла со списком чатов (chats.json)\n\n## Эквивалентная команда\n\n```bash\npachca chats request-export \\\n --start-at=2025-03-20 \\\n --end-at=2025-03-20 \\\n --webhook-url=https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2 \\\n --chat-ids=1381521 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/request-export\nПолная справка: `pachca api POST /chats/exports --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats/exports","description":"Экспорт сообщений\n\nМетод для запрашивания экспорта сообщений за указанный период.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на экспорт сообщений","required":["start_at","end_at","webhook_url"],"properties":{"start_at":{"type":"string","format":"date","description":"Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","example":"2025-03-20"},"end_at":{"type":"string","format":"date","description":"Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","example":"2025-03-20"},"webhook_url":{"type":"string","description":"Адрес, на который будет отправлен вебхук по завершению экспорта","example":"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2"},"chat_ids":{"type":"array","description":"Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.","example":[1381521],"items":{"type":"integer","format":"int32"}},"skip_chats_file":{"type":"boolean","description":"Пропуск формирования файла со списком чатов (chats.json)","default":false,"example":false}},"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_exports:write","plan":"corporation","scopeRoles":["owner"]},"paginated":false},"docs":"# Экспорт сообщений\n\n**Метод**: `POST`\n\n**Путь**: `/chats/exports`\n\n> **Скоуп:** `chat_exports:write`\n\n> **Внимание:** Доступно только на тарифе **Корпорация**\n\nМетод для запрашивания экспорта сообщений за указанный период.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `start_at: date` (required) — Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `\"2025-03-20\"`\n- `end_at: date` (required) — Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `\"2025-03-20\"`\n- `webhook_url: string` (required) — Адрес, на который будет отправлен вебхук по завершению экспорта. Пример: `\"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2\"`\n- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.. Пример: `[1381521]`\n- `skip_chats_file: boolean` (default: false) — Пропуск формирования файла со списком чатов (chats.json). Пример: `false`\n\n### Пример\n\n```json\n{\n \"start_at\": \"2025-03-20\",\n \"end_at\": \"2025-03-20\",\n \"webhook_url\": \"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2\",\n \"chat_ids\": [\n 1381521\n ]\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/exports\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"start_at\": \"2025-03-20\",\n \"end_at\": \"2025-03-20\",\n \"webhook_url\": \"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2\",\n \"chat_ids\": [\n 1381521\n ]\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats/exports/{id}","summary":"Скачать архив экспорта","scope":"chat_exports:read","plan":"corporation","auth":true,"paginated":false,"command":"pachca chats download-export","docLink":"https://dev.pachca.com/api/chats/download-export","describe":"# GET /chats/exports/{id} — Скачать архив экспорта\n\n> **Скоуп:** `chat_exports:read`\n\n> **Тариф:** Корпорация\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор экспорта\n\n## Эквивалентная команда\n\n```bash\npachca chats download-export 22322 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/download-export\nПолная справка: `pachca api GET /chats/exports/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats/exports/{id}","description":"Скачать архив экспорта\n\nМетод для скачивания готового архива экспорта сообщений.\n\nДля получения архива вам необходимо знать его `id` и указать его в `URL` запроса.\n\nВ ответ на запрос сервер вернёт `302 Found` с заголовком `Location`, содержащим временную ссылку на скачивание файла. Большинство HTTP-клиентов автоматически следуют редиректу и скачивают файл.","parameters":[{"name":"id","in":"path","description":"Идентификатор экспорта","required":true,"schema":{"type":"integer","format":"int32","example":22322},"example":22322}],"responses":{"302":{"description":"Redirection","headers":{"location":{"schema":{"type":"string","format":"uri"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"},{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}]}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_exports:read","plan":"corporation","scopeRoles":["owner"]},"paginated":false},"docs":"# Скачать архив экспорта\n\n**Метод**: `GET`\n\n**Путь**: `/chats/exports/{id}`\n\n> **Скоуп:** `chat_exports:read`\n\n> **Внимание:** Доступно только на тарифе **Корпорация**\n\nМетод для скачивания готового архива экспорта сообщений.\n\nДля получения архива вам необходимо знать его `id` и указать его в `URL` запроса.\n\nВ ответ на запрос сервер вернёт `302 Found` с заголовком `Location`, содержащим временную ссылку на скачивание файла. Большинство HTTP-клиентов автоматически следуют редиректу и скачивают файл.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор экспорта\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/exports/22322\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 302: Redirection\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n- **Вариант 2**\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats/{id}","summary":"Информация о чате","scope":"chats:read","plan":null,"auth":true,"paginated":false,"command":"pachca chats get","docLink":"https://dev.pachca.com/api/chats/get","describe":"# GET /chats/{id} — Информация о чате\n\n> **Скоуп:** `chats:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca chats get 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/get\nПолная справка: `pachca api GET /chats/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats/{id}","description":"Информация о чате\n\nМетод для получения информации о чате.\n\nДля получения чата вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о чате\n\n**Метод**: `GET`\n\n**Путь**: `/chats/{id}`\n\n> **Скоуп:** `chats:read`\n\nМетод для получения информации о чате.\n\nДля получения чата вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/334\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Чат\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}","summary":"Редактирование чата","scope":"chats:update","plan":null,"auth":true,"paginated":false,"command":"pachca chats update","docLink":"https://dev.pachca.com/api/chats/update","describe":"# PUT /chats/{id} — Редактирование чата\n\n> **Скоуп:** `chats:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Тело запроса\n\n- `chat: object` (required) — Собранный объект параметров обновляемого чата\n - `name: string` (max length: 255) — Название\n - `public: boolean` — Открытый доступ\n\n## Эквивалентная команда\n\n```bash\npachca chats update 334 \\\n --name=Бассейн \\\n --public \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/update\nПолная справка: `pachca api PUT /chats/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}","description":"Редактирование чата\n\nМетод для обновления параметров чата.\n\nДля обновления нужно знать `id` чата и указать его в `URL`. Все обновляемые поля передаются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на обновление чата","required":["chat"],"properties":{"chat":{"type":"object","description":"Собранный объект параметров обновляемого чата","properties":{"name":{"type":"string","description":"Название","example":"Бассейн","maxLength":255},"public":{"type":"boolean","description":"Открытый доступ","example":true}}}},"$ref":"#/components/schemas/ChatUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:update","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование чата\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}`\n\n> **Скоуп:** `chats:update`\n\nМетод для обновления параметров чата.\n\nДля обновления нужно знать `id` чата и указать его в `URL`. Все обновляемые поля передаются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `chat: object` (required) — Собранный объект параметров обновляемого чата\n - `name: string` (max length: 255) — Название. Пример: `\"Бассейн\"`\n - `public: boolean` — Открытый доступ. Пример: `true`\n\n### Пример\n\n```json\n{\n \"chat\": {\n \"name\": \"Бассейн\",\n \"public\": true\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"chat\": {\n \"name\": \"Бассейн\",\n \"public\": true\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Чат\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}/archive","summary":"Архивация чата","scope":"chats:archive","plan":null,"auth":true,"paginated":false,"command":"pachca chats archive","docLink":"https://dev.pachca.com/api/chats/archive","describe":"# PUT /chats/{id}/archive — Архивация чата\n\n> **Скоуп:** `chats:archive`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca chats archive 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/archive\nПолная справка: `pachca api PUT /chats/{id}/archive --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}/archive","description":"Архивация чата\n\nМетод для отправки чата в архив.\n\nДля отправки чата в архив вам необходимо знать `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:archive","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Архивация чата\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}/archive`\n\n> **Скоуп:** `chats:archive`\n\nМетод для отправки чата в архив.\n\nДля отправки чата в архив вам необходимо знать `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334/archive\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats/{id}/group_tags","summary":"Добавление тегов","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members add-group-tags","docLink":"https://dev.pachca.com/api/members/add-group-tags","describe":"# POST /chats/{id}/group_tags — Добавление тегов\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Тело запроса\n\n- `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, которые станут участниками\n\n## Эквивалентная команда\n\n```bash\npachca members add-group-tags 334 \\\n --group-tag-ids=86,18 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/add-group-tags\nПолная справка: `pachca api POST /chats/{id}/group_tags --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats/{id}/group_tags","description":"Добавление тегов\n\nМетод для добавления тегов в состав участников беседы или канала.\n\nПосле добавления тега все его участники автоматически становятся участниками чата. Состав участников тега и чата синхронизируется автоматически: при добавлении нового участника в тег он сразу появляется в чате, при удалении из тега — удаляется из чата.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на добавление тегов в чат","required":["group_tag_ids"],"properties":{"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, которые станут участниками","example":[86,18],"items":{"type":"integer","format":"int32"}}},"$ref":"#/components/schemas/AddTagsRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Добавление тегов\n\n**Метод**: `POST`\n\n**Путь**: `/chats/{id}/group_tags`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для добавления тегов в состав участников беседы или канала.\n\nПосле добавления тега все его участники автоматически становятся участниками чата. Состав участников тега и чата синхронизируется автоматически: при добавлении нового участника в тег он сразу появляется в чате, при удалении из тега — удаляется из чата.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, которые станут участниками. Пример: `[86,18]`\n\n### Пример\n\n```json\n{\n \"group_tag_ids\": [\n 86,\n 18\n ]\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/334/group_tags\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"group_tag_ids\": [\n 86,\n 18\n ]\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/chats/{id}/group_tags/{tag_id}","summary":"Исключение тега","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members remove-group-tag","docLink":"https://dev.pachca.com/api/members/remove-group-tag","describe":"# DELETE /chats/{id}/group_tags/{tag_id} — Исключение тега\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `tag_id` — путь (обязательный): Идентификатор тега\n\n## Эквивалентная команда\n\n```bash\npachca members remove-group-tag 334 86 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/remove-group-tag\nПолная справка: `pachca api DELETE /chats/{id}/group_tags/{tag_id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/chats/{id}/group_tags/{tag_id}","description":"Исключение тега\n\nМетод для исключения тега из состава участников беседы или канала.\n\nДля исключения тега вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"tag_id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":86},"example":86}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Исключение тега\n\n**Метод**: `DELETE`\n\n**Путь**: `/chats/{id}/group_tags/{tag_id}`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для исключения тега из состава участников беседы или канала.\n\nДля исключения тега вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n- `tag_id: integer, int32` (required) — Идентификатор тега\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/chats/334/group_tags/86\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/chats/{id}/leave","summary":"Выход из беседы или канала","scope":"chats:leave","plan":null,"auth":true,"paginated":false,"command":"pachca members leave","docLink":"https://dev.pachca.com/api/members/leave","describe":"# DELETE /chats/{id}/leave — Выход из беседы или канала\n\n> **Скоуп:** `chats:leave`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca members leave 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/leave\nПолная справка: `pachca api DELETE /chats/{id}/leave --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/chats/{id}/leave","description":"Выход из беседы или канала\n\nМетод для самостоятельного выхода из беседы или канала.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:leave","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Выход из беседы или канала\n\n**Метод**: `DELETE`\n\n**Путь**: `/chats/{id}/leave`\n\n> **Скоуп:** `chats:leave`\n\nМетод для самостоятельного выхода из беседы или канала.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/chats/334/leave\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats/{id}/members","summary":"Список участников чата","scope":"chat_members:read","plan":null,"auth":true,"paginated":true,"command":"pachca members list","docLink":"https://dev.pachca.com/api/members/list","describe":"# GET /chats/{id}/members — Список участников чата\n\n> **Скоуп:** `chat_members:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `role` — query: Роль в чате\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca members list 334 \\\n --role=all \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/list\nПолная справка: `pachca api GET /chats/{id}/members --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats/{id}/members","description":"Список участников чата\n\nМетод для получения актуального списка участников чата.\n\nВладелец пространства может получить состав участников любого чата пространства. Администраторы и боты могут получить список участников только тех чатов, в которых состоят (или которые являются открытыми).","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"role","in":"query","description":"Роль в чате","required":false,"schema":{"default":"all","allOf":[{"type":"string","description":"Роль участника чата (с фильтром все)","enum":["all","owner","admin","editor","member"],"x-enum-descriptions":{"all":"Любая роль","owner":"Создатель","admin":"Админ","editor":"Редактор","member":"Участник/подписчик"},"$ref":"#/components/schemas/ChatMemberRoleFilter"}]},"example":"all","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список участников чата\n\n**Метод**: `GET`\n\n**Путь**: `/chats/{id}/members`\n\n> **Скоуп:** `chat_members:read`\n\nМетод для получения актуального списка участников чата.\n\nВладелец пространства может получить состав участников любого чата пространства. Администраторы и боты могут получить список участников только тех чатов, в которых состоят (или которые являются открытыми).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n### Query параметры\n\n- `role: string` (default: all) — Роль в чате\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats/{id}/members","summary":"Добавление пользователей","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members add","docLink":"https://dev.pachca.com/api/members/add","describe":"# POST /chats/{id}/members — Добавление пользователей\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата (беседа, канал или чат треда)\n\n## Тело запроса\n\n- `member_ids: array of integer` (required) — Массив идентификаторов пользователей, которые станут участниками\n- `silent: boolean` — Не создавать в чате системное сообщение о добавлении участника\n\n## Эквивалентная команда\n\n```bash\npachca members add 334 \\\n --member-ids=186,187 \\\n --silent \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/add\nПолная справка: `pachca api POST /chats/{id}/members --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats/{id}/members","description":"Добавление пользователей\n\nМетод для добавления пользователей в состав участников беседы, канала или треда.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата (беседа, канал или чат треда)","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на добавление участников в чат","required":["member_ids"],"properties":{"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, которые станут участниками","example":[186,187],"items":{"type":"integer","format":"int32"}},"silent":{"type":"boolean","description":"Не создавать в чате системное сообщение о добавлении участника","example":true}},"$ref":"#/components/schemas/AddMembersRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Добавление пользователей\n\n**Метод**: `POST`\n\n**Путь**: `/chats/{id}/members`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для добавления пользователей в состав участников беседы, канала или треда.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата (беседа, канал или чат треда)\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `member_ids: array of integer` (required) — Массив идентификаторов пользователей, которые станут участниками. Пример: `[186,187]`\n- `silent: boolean` — Не создавать в чате системное сообщение о добавлении участника. Пример: `true`\n\n### Пример\n\n```json\n{\n \"member_ids\": [\n 186,\n 187\n ],\n \"silent\": true\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/334/members\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"member_ids\": [\n 186,\n 187\n ],\n \"silent\": true\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/chats/{id}/members/{user_id}","summary":"Исключение пользователя","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members remove","docLink":"https://dev.pachca.com/api/members/remove","describe":"# DELETE /chats/{id}/members/{user_id} — Исключение пользователя\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca members remove 334 186 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/remove\nПолная справка: `pachca api DELETE /chats/{id}/members/{user_id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/chats/{id}/members/{user_id}","description":"Исключение пользователя\n\nМетод для исключения пользователя из состава участников беседы или канала.\n\nЕсли пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](DELETE /chats/{id}/leave).","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":186},"example":186}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Исключение пользователя\n\n**Метод**: `DELETE`\n\n**Путь**: `/chats/{id}/members/{user_id}`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для исключения пользователя из состава участников беседы или канала.\n\nЕсли пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](DELETE /chats/{id}/leave).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/chats/334/members/186\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}/members/{user_id}","summary":"Редактирование роли","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members update","docLink":"https://dev.pachca.com/api/members/update","describe":"# PUT /chats/{id}/members/{user_id} — Редактирование роли\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `role: string` (required) — Роль\n Значения: `admin` — Админ, `editor` — Редактор (доступно только для каналов), `member` — Участник или подписчик\n\n## Эквивалентная команда\n\n```bash\npachca members update 334 186 \\\n --role=admin \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/update\nПолная справка: `pachca api PUT /chats/{id}/members/{user_id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}/members/{user_id}","description":"Редактирование роли\n\nМетод для редактирования роли пользователя или бота в беседе или канале.\n\nДля редактирования роли в беседе или канале вам необходимо знать `id` чата и пользователя (или бота) и указать их в `URL` запроса. Все редактируемые параметры роли указываются в теле запроса.\n\nВладельцу чата роль изменить нельзя. Он всегда имеет права Админа в чате.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":186},"example":186}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на изменение роли участника","required":["role"],"properties":{"role":{"description":"Роль","example":"admin","allOf":[{"type":"string","description":"Роль участника чата","enum":["admin","editor","member"],"x-enum-descriptions":{"admin":"Админ","editor":"Редактор (доступно только для каналов)","member":"Участник или подписчик"},"$ref":"#/components/schemas/ChatMemberRole"}]}},"$ref":"#/components/schemas/UpdateMemberRoleRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование роли\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}/members/{user_id}`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для редактирования роли пользователя или бота в беседе или канале.\n\nДля редактирования роли в беседе или канале вам необходимо знать `id` чата и пользователя (или бота) и указать их в `URL` запроса. Все редактируемые параметры роли указываются в теле запроса.\n\nВладельцу чата роль изменить нельзя. Он всегда имеет права Админа в чате.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `role: string` (required) — Роль\n Значения: `admin` — Админ, `editor` — Редактор (доступно только для каналов), `member` — Участник или подписчик\n\n### Пример\n\n```json\n{\n \"role\": \"admin\"\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334/members/186\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"role\": \"admin\"\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}/unarchive","summary":"Разархивация чата","scope":"chats:archive","plan":null,"auth":true,"paginated":false,"command":"pachca chats unarchive","docLink":"https://dev.pachca.com/api/chats/unarchive","describe":"# PUT /chats/{id}/unarchive — Разархивация чата\n\n> **Скоуп:** `chats:archive`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca chats unarchive 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/unarchive\nПолная справка: `pachca api PUT /chats/{id}/unarchive --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}/unarchive","description":"Разархивация чата\n\nМетод для возвращения чата из архива.\n\nДля разархивации чата вам необходимо знать её `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:archive","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Разархивация чата\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}/unarchive`\n\n> **Скоуп:** `chats:archive`\n\nМетод для возвращения чата из архива.\n\nДля разархивации чата вам необходимо знать её `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334/unarchive\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/custom_properties","summary":"Список дополнительных полей","scope":"custom_properties:read","plan":null,"auth":true,"paginated":false,"command":"pachca custom-properties list","docLink":"https://dev.pachca.com/api/custom-properties/list","describe":"# GET /custom_properties — Список дополнительных полей\n\n> **Скоуп:** `custom_properties:read`\n\n## Параметры\n\n- `entity_type` — query (обязательный): Тип сущности\n\n## Эквивалентная команда\n\n```bash\npachca custom-properties list \\\n --entity-type=User \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/custom-properties/list\nПолная справка: `pachca api GET /custom_properties --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/custom_properties","description":"Список дополнительных полей\n\nНа данный момент работа с дополнительными полями типа \"Файл\" недоступна.\n\nМетод для получения актуального списка дополнительных полей участников и напоминаний в вашей компании.\n\nПо умолчанию в вашей компании все сущности имеют только базовые поля. Но администратор вашей компании может добавлять дополнительные поля, редактировать их и удалять. Если при создании сотрудников (или напоминаний) вы используете дополнительные поля, которые не являются актуальными (удалены или не существуют) - вы получите ошибку.","parameters":[{"name":"entity_type","in":"query","description":"Тип сущности","required":true,"schema":{"type":"string","description":"Тип сущности для поиска","enum":["User","Task"],"x-enum-descriptions":{"User":"Пользователь","Task":"Задача"},"example":"User","$ref":"#/components/schemas/SearchEntityType"},"example":"User","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]}},"$ref":"#/components/schemas/CustomPropertyDefinition"}}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"custom_properties:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Список дополнительных полей\n\n**Метод**: `GET`\n\n**Путь**: `/custom_properties`\n\n> **Скоуп:** `custom_properties:read`\n\nНа данный момент работа с дополнительными полями типа \"Файл\" недоступна.\n\nМетод для получения актуального списка дополнительных полей участников и напоминаний в вашей компании.\n\nПо умолчанию в вашей компании все сущности имеют только базовые поля. Но администратор вашей компании может добавлять дополнительные поля, редактировать их и удалять. Если при создании сотрудников (или напоминаний) вы используете дополнительные поля, которые не являются актуальными (удалены или не существуют) - вы получите ошибку.\n\n## Параметры\n\n### Query параметры\n\n- `entity_type: string` (required) — Тип сущности\n Значения: `User`, `Task`\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\"\n }\n ]\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/direct_url","summary":"Загрузка файла","scope":null,"plan":null,"auth":false,"paginated":false,"command":"pachca files direct-url","docLink":"https://dev.pachca.com/api/files/direct-url","describe":"# POST /direct_url — Загрузка файла\n\n> Авторизация не требуется\n\n## Тело запроса\n\n- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `file: binary` (required) — Файл для загрузки\n\n## Эквивалентная команда\n\n```bash\n# URL получается из ответа POST /uploads (поле direct_url)\npachca files direct-url \\\n --direct-url=$DIRECT_URL \\\n --content-disposition=your_api_token_here \\\n --acl=your_api_token_here \\\n --policy=your_api_token_here \\\n --x-amz-credential=your_api_token_here \\\n --x-amz-algorithm=your_api_token_here \\\n --x-amz-date=your_api_token_here \\\n --x-amz-signature=your_api_token_here \\\n --key=your_api_token_here \\\n --file=./file.jpg \\\n --json\n```\n\nДокументация: https://dev.pachca.com/api/files/direct-url\nПолная справка: `pachca api POST /direct_url --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/direct_url","description":"Загрузка файла\n\nЗагрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](POST /uploads).","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["Content-Disposition","acl","policy","x-amz-credential","x-amz-algorithm","x-amz-date","x-amz-signature","key","file"],"properties":{"Content-Disposition":{"type":"string","description":"Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"acl":{"type":"string","description":"Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"policy":{"type":"string","description":"Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-credential":{"type":"string","description":"Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-algorithm":{"type":"string","description":"Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-date":{"type":"string","description":"Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-signature":{"type":"string","description":"Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"key":{"type":"string","description":"Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"file":{"type":"string","format":"binary","description":"Файл для загрузки"}},"$ref":"#/components/schemas/FileUploadRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "}},"requirements":{"auth":false},"paginated":false},"docs":"# Загрузка файла\n\n**Метод**: `POST`\n\n**Путь**: `/direct_url`\n\n> Авторизация не требуется\n\nЗагрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](POST /uploads).\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `multipart/form-data`\n\n### Схема\n\n- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `file: binary` (required) — Файл для загрузки\n\n\n## Пример запроса\n\n```bash\n# URL получается из ответа POST /uploads (поле direct_url)\ncurl \"$DIRECT_URL\" \\\n -F \"Content-Disposition=attachment\" \\\n -F \"acl=private\" \\\n -F \"policy=eyJloNBpcmF0aW9u...\" \\\n -F \"x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request\" \\\n -F \"x-amz-algorithm=AWS4-HMAC-SHA256\" \\\n -F \"x-amz-date=20211122T065734Z\" \\\n -F \"x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475\" \\\n -F \"key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/$filename\" \\\n -F \"file=@filename.png\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n"},{"method":"POST","path":"/group_tags","summary":"Новый тег","scope":"group_tags:write","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags create","docLink":"https://dev.pachca.com/api/group-tags/create","describe":"# POST /group_tags — Новый тег\n\n> **Скоуп:** `group_tags:write`\n\n## Тело запроса\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags create \\\n --name=\"Новое название тега\" \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/create\nПолная справка: `pachca api POST /group_tags --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/group_tags","description":"Новый тег\n\nМетод для создания нового тега.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание или редактирование тега","required":["group_tag"],"properties":{"group_tag":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Название тега","example":"Новое название тега","maxLength":255}}}},"$ref":"#/components/schemas/GroupTagRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Новый тег\n\n**Метод**: `POST`\n\n**Путь**: `/group_tags`\n\n> **Скоуп:** `group_tags:write`\n\nМетод для создания нового тега.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Новое название тега\"`\n\n### Пример\n\n```json\n{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/group_tags\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тег\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/group_tags","summary":"Список тегов сотрудников","scope":"group_tags:read","plan":null,"auth":true,"paginated":true,"command":"pachca group-tags list","docLink":"https://dev.pachca.com/api/group-tags/list","describe":"# GET /group_tags — Список тегов сотрудников\n\n> **Скоуп:** `group_tags:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `names` — query: Массив названий тегов, по которым вы хотите отфильтровать список\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca group-tags list \\\n --names=Design,Product \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/list\nПолная справка: `pachca api GET /group_tags --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/group_tags","description":"Список тегов сотрудников\n\nМетод для получения актуального списка тегов сотрудников. Названия тегов являются уникальными в компании.","parameters":[{"name":"names","in":"query","description":"Массив названий тегов, по которым вы хотите отфильтровать список","required":false,"schema":{"type":"array","description":"Массив названий тегов","example":["Design","Product"],"items":{"type":"string"},"$ref":"#/components/schemas/TagNamesFilter"},"example":["Design","Product"]},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:read","scopeRoles":["owner","admin"]},"paginated":true},"docs":"# Список тегов сотрудников\n\n**Метод**: `GET`\n\n**Путь**: `/group_tags`\n\n> **Скоуп:** `group_tags:read`\n\nМетод для получения актуального списка тегов сотрудников. Названия тегов являются уникальными в компании.\n\n## Параметры\n\n### Query параметры\n\n- `names: array` — Массив названий тегов, по которым вы хотите отфильтровать список\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Product&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/group_tags/{id}","summary":"Информация о теге","scope":"group_tags:read","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags get","docLink":"https://dev.pachca.com/api/group-tags/get","describe":"# GET /group_tags/{id} — Информация о теге\n\n> **Скоуп:** `group_tags:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags get 9111 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/get\nПолная справка: `pachca api GET /group_tags/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/group_tags/{id}","description":"Информация о теге\n\nМетод для получения информации о теге. Названия тегов являются уникальными в компании.\n\nДля получения тега вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:read","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Информация о теге\n\n**Метод**: `GET`\n\n**Путь**: `/group_tags/{id}`\n\n> **Скоуп:** `group_tags:read`\n\nМетод для получения информации о теге. Названия тегов являются уникальными в компании.\n\nДля получения тега вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/group_tags/9111\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тег\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/group_tags/{id}","summary":"Редактирование тега","scope":"group_tags:write","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags update","docLink":"https://dev.pachca.com/api/group-tags/update","describe":"# PUT /group_tags/{id} — Редактирование тега\n\n> **Скоуп:** `group_tags:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n\n## Тело запроса\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags update 9111 \\\n --name=\"Новое название тега\" \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/update\nПолная справка: `pachca api PUT /group_tags/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/group_tags/{id}","description":"Редактирование тега\n\nМетод для редактирования тега.\n\nДля редактирования тега вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры тега указываются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание или редактирование тега","required":["group_tag"],"properties":{"group_tag":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Название тега","example":"Новое название тега","maxLength":255}}}},"$ref":"#/components/schemas/GroupTagRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Редактирование тега\n\n**Метод**: `PUT`\n\n**Путь**: `/group_tags/{id}`\n\n> **Скоуп:** `group_tags:write`\n\nМетод для редактирования тега.\n\nДля редактирования тега вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры тега указываются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Новое название тега\"`\n\n### Пример\n\n```json\n{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/group_tags/9111\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тег\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/group_tags/{id}","summary":"Удаление тега","scope":"group_tags:write","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags delete","docLink":"https://dev.pachca.com/api/group-tags/delete","describe":"# DELETE /group_tags/{id} — Удаление тега\n\n> **Скоуп:** `group_tags:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags delete 9111 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/delete\nПолная справка: `pachca api DELETE /group_tags/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/group_tags/{id}","description":"Удаление тега\n\nМетод для удаления тега.\n\nДля удаления тега вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление тега\n\n**Метод**: `DELETE`\n\n**Путь**: `/group_tags/{id}`\n\n> **Скоуп:** `group_tags:write`\n\nМетод для удаления тега.\n\nДля удаления тега вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/group_tags/9111\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/group_tags/{id}/users","summary":"Список сотрудников тега","scope":"group_tags:read","plan":null,"auth":true,"paginated":true,"command":"pachca group-tags list-users","docLink":"https://dev.pachca.com/api/group-tags/list-users","describe":"# GET /group_tags/{id}/users — Список сотрудников тега\n\n> **Скоуп:** `group_tags:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca group-tags list-users 9111 \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/list-users\nПолная справка: `pachca api GET /group_tags/{id}/users --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/group_tags/{id}/users","description":"Список сотрудников тега\n\nМетод для получения актуального списка сотрудников тега.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:read","scopeRoles":["owner","admin"]},"paginated":true},"docs":"# Список сотрудников тега\n\n**Метод**: `GET`\n\n**Путь**: `/group_tags/{id}/users`\n\n> **Скоуп:** `group_tags:read`\n\nМетод для получения актуального списка сотрудников тега.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages","summary":"Новое сообщение","scope":"messages:create","plan":null,"auth":true,"paginated":false,"command":"pachca messages create","docLink":"https://dev.pachca.com/api/messages/create","describe":"# POST /messages — Новое сообщение\n\n> **Скоуп:** `messages:create`\n\n## Тело запроса\n\n- `message: object` (required) — Собранный объект параметров создаваемого сообщения\n - `entity_type: string` — Тип сущности\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности\n - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` (required) — Размер файла в байтах, отображаемый пользователю\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image)\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image)\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.\n - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.\n - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.\n- `link_preview: boolean` (default: false) — Отображение предпросмотра первой найденной ссылки в тексте сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages create \\\n --entity-id=334 \\\n --content=\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\" \\\n --files='[{\"key\":\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\"name\":\"logo.png\",\"file_type\":\"image\",\"size\":12345,\"width\":800,\"height\":600,\"duration_ms\":5400,\"waveform\":\"4,8,12,20,16,10,6,3\"}]' \\\n --buttons='[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"},{\"text\":\"Отлично!\",\"data\":\"awesome\"}]]' \\\n --parent-message-id=194270 \\\n --display-avatar-url=https://example.com/avatar.png \\\n --display-name=\"Бот Поддержки\" \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/create\nПолная справка: `pachca api POST /messages --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages","description":"Новое сообщение\n\nМетод для отправки сообщения в беседу или канал, личного сообщения пользователю или комментария в тред.\n\nПри использовании `entity_type: \"discussion\"` (или просто без указания `entity_type`) допускается отправка любого `chat_id` в поле `entity_id`. То есть, сообщение можно отправить зная только идентификатор чата. При этом, вы имеете возможность отправить сообщение в тред по его идентификатору или личное сообщение по идентификатору пользователя.\n\nДля отправки личного сообщения пользователю создавать чат не требуется. Достаточно указать `entity_type: \"user\"` и идентификатор пользователя. Чат будет создан автоматически, если между вами ещё не было переписки. Между двумя пользователями может быть только один личный чат.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание сообщения","required":["message"],"properties":{"message":{"type":"object","description":"Собранный объект параметров создаваемого сообщения","required":["entity_id","content"],"properties":{"entity_type":{"description":"Тип сущности","default":"discussion","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности","example":334},"content":{"type":"string","description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"files":{"type":"array","description":"Прикрепляемые файлы","items":{"type":"object","required":["key","name","file_type","size"],"properties":{"key":{"type":"string","description":"Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)","example":"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"},"name":{"type":"string","description":"Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)","example":"logo.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"size":{"type":"integer","format":"int32","description":"Размер файла в байтах, отображаемый пользователю","example":12345},"width":{"type":"integer","format":"int32","description":"Ширина изображения в px (используется в случае, если file_type указан как image)","example":800},"height":{"type":"integer","format":"int32","description":"Высота изображения в px (используется в случае, если file_type указан как image)","example":600},"duration_ms":{"type":"integer","format":"int32","description":"Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":5400,"minimum":1},"waveform":{"type":"string","description":"Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":"4,8,12,20,16,10,6,3","maxLength":256}}}},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.","example":[[{"text":"Подробнее","url":"https://example.com/details"},{"text":"Отлично!","data":"awesome"}]],"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.","example":194270},"display_avatar_url":{"type":"string","description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"https://example.com/avatar.png","maxLength":255},"display_name":{"type":"string","description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"Бот Поддержки","maxLength":255},"skip_invite_mentions":{"type":"boolean","description":"Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.","default":false,"example":false}}},"link_preview":{"type":"boolean","description":"Отображение предпросмотра первой найденной ссылки в тексте сообщения","default":false,"example":false}},"$ref":"#/components/schemas/MessageCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","display_avatar_url","display_name","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред сообщения","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новое сообщение\n\n**Метод**: `POST`\n\n**Путь**: `/messages`\n\n> **Скоуп:** `messages:create`\n\nМетод для отправки сообщения в беседу или канал, личного сообщения пользователю или комментария в тред.\n\nПри использовании `entity_type: \"discussion\"` (или просто без указания `entity_type`) допускается отправка любого `chat_id` в поле `entity_id`. То есть, сообщение можно отправить зная только идентификатор чата. При этом, вы имеете возможность отправить сообщение в тред по его идентификатору или личное сообщение по идентификатору пользователя.\n\nДля отправки личного сообщения пользователю создавать чат не требуется. Достаточно указать `entity_type: \"user\"` и идентификатор пользователя. Чат будет создан автоматически, если между вами ещё не было переписки. Между двумя пользователями может быть только один личный чат.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `message: object` (required) — Собранный объект параметров создаваемого сообщения\n - `entity_type: string` — Тип сущности\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности. Пример: `334`\n - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\"`\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `\"logo.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` (required) — Размер файла в байтах, отображаемый пользователю. Пример: `12345`\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800`\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600`\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `5400`\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.. Пример: `[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"},{\"text\":\"Отлично!\",\"data\":\"awesome\"}]]`\n - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.. Пример: `194270`\n - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `\"https://example.com/avatar.png\"`\n - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `\"Бот Поддержки\"`\n - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.. Пример: `false`\n- `link_preview: boolean` (default: false) — Отображение предпросмотра первой найденной ссылки в тексте сообщения. Пример: `false`\n\n### Пример\n\n```json\n{\n \"message\": {\n \"entity_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n },\n {\n \"text\": \"Отлично!\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"parent_message_id\": 194270,\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"message\": {\n \"entity_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n },\n {\n \"text\": \"Отлично!\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"parent_message_id\": 194270,\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сообщение\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920`\n - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок\n - `thread: object` (required) — Тред сообщения\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null`\n - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null`\n - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null`\n - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages","summary":"Список сообщений чата","scope":"messages:read","plan":null,"auth":true,"paginated":true,"command":"pachca messages list","docLink":"https://dev.pachca.com/api/messages/list","describe":"# GET /messages — Список сообщений чата\n\n> **Скоуп:** `messages:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `chat_id` — query (обязательный): Идентификатор чата (беседа, канал, диалог или чат треда)\n- `sort` — query: Поле сортировки\n- `order` — query: Направление сортировки\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca messages list \\\n --chat-id=198 \\\n --sort=id \\\n --order=desc \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/list\nПолная справка: `pachca api GET /messages --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages","description":"Список сообщений чата\n\nМетод для получения списка сообщений бесед, каналов, тредов и личных сообщений.\n\nДля получения сообщений вам необходимо знать `chat_id` требуемой беседы, канала, треда или диалога, и указать его в `URL` запроса. Сообщения будут возвращены в порядке убывания даты отправки (то есть, сначала будут идти последние сообщения чата). Для получения более ранних сообщений чата доступны параметры `limit` и `cursor`.","parameters":[{"name":"chat_id","in":"query","description":"Идентификатор чата (беседа, канал, диалог или чат треда)","required":true,"schema":{"type":"integer","format":"int32","example":198},"example":198,"explode":false},{"name":"sort","in":"query","description":"Поле сортировки","required":false,"schema":{"default":"id","allOf":[{"type":"string","description":"Поле сортировки сообщений","enum":["id"],"x-enum-descriptions":{"id":"По идентификатору сообщения"},"$ref":"#/components/schemas/MessageSortField"}]},"example":"id","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"default":"desc","allOf":[{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"$ref":"#/components/schemas/SortOrder"}]},"example":"desc","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","display_avatar_url","display_name","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред сообщения","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список сообщений чата\n\n**Метод**: `GET`\n\n**Путь**: `/messages`\n\n> **Скоуп:** `messages:read`\n\nМетод для получения списка сообщений бесед, каналов, тредов и личных сообщений.\n\nДля получения сообщений вам необходимо знать `chat_id` требуемой беседы, канала, треда или диалога, и указать его в `URL` запроса. Сообщения будут возвращены в порядке убывания даты отправки (то есть, сначала будут идти последние сообщения чата). Для получения более ранних сообщений чата доступны параметры `limit` и `cursor`.\n\n## Параметры\n\n### Query параметры\n\n- `chat_id: integer, int32` (required) — Идентификатор чата (беседа, канал, диалог или чат треда)\n- `sort: string` (default: id) — Поле сортировки\n- `order: string` (default: desc) — Направление сортировки\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=desc&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920`\n - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок\n - `thread: object` (required) — Тред сообщения\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null`\n - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null`\n - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null`\n - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": null\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages/{id}","summary":"Информация о сообщении","scope":"messages:read","plan":null,"auth":true,"paginated":false,"command":"pachca messages get","docLink":"https://dev.pachca.com/api/messages/get","describe":"# GET /messages/{id} — Информация о сообщении\n\n> **Скоуп:** `messages:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages get 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/get\nПолная справка: `pachca api GET /messages/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages/{id}","description":"Информация о сообщении\n\nМетод для получения информации о сообщении.\n\nДля получения сообщения вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","display_avatar_url","display_name","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред сообщения","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о сообщении\n\n**Метод**: `GET`\n\n**Путь**: `/messages/{id}`\n\n> **Скоуп:** `messages:read`\n\nМетод для получения информации о сообщении.\n\nДля получения сообщения вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сообщение\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920`\n - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок\n - `thread: object` (required) — Тред сообщения\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null`\n - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null`\n - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null`\n - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/messages/{id}","summary":"Редактирование сообщения","scope":"messages:update","plan":null,"auth":true,"paginated":false,"command":"pachca messages update","docLink":"https://dev.pachca.com/api/messages/update","describe":"# PUT /messages/{id} — Редактирование сообщения\n\n> **Скоуп:** `messages:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Тело запроса\n\n- `message: object` (required) — Собранный объект параметров редактируемого сообщения\n - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)\n - `file_type: string` — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` — Размер файла в байтах, отображаемый пользователю\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image)\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image)\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.\n - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n\n## Эквивалентная команда\n\n```bash\npachca messages update 194275 \\\n --content=\"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\" \\\n --files='[{\"key\":\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\"name\":\"logo.png\",\"file_type\":\"image\",\"size\":12345,\"width\":800,\"height\":600,\"duration_ms\":5400,\"waveform\":\"4,8,12,20,16,10,6,3\"}]' \\\n --buttons='[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"}]]' \\\n --display-avatar-url=https://example.com/avatar.png \\\n --display-name=\"Бот Поддержки\" \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/update\nПолная справка: `pachca api PUT /messages/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/messages/{id}","description":"Редактирование сообщения\n\nМетод для редактирования сообщения или комментария.\n\nДля редактирования сообщения вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сообщения указываются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на редактирование сообщения","required":["message"],"properties":{"message":{"type":"object","description":"Собранный объект параметров редактируемого сообщения","properties":{"content":{"type":"string","description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","example":"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет."},"files":{"type":"array","description":"Прикрепляемые файлы","items":{"type":"object","required":["key","name"],"properties":{"key":{"type":"string","description":"Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)","example":"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"},"name":{"type":"string","description":"Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)","example":"logo.png"},"file_type":{"description":"Тип файла","default":"file","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"size":{"type":"integer","format":"int32","description":"Размер файла в байтах, отображаемый пользователю","example":12345},"width":{"type":"integer","format":"int32","description":"Ширина изображения в px (используется в случае, если file_type указан как image)","example":800},"height":{"type":"integer","format":"int32","description":"Высота изображения в px (используется в случае, если file_type указан как image)","example":600},"duration_ms":{"type":"integer","format":"int32","description":"Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":5400,"minimum":1},"waveform":{"type":"string","description":"Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":"4,8,12,20,16,10,6,3","maxLength":256}}}},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.","example":[[{"text":"Подробнее","url":"https://example.com/details"}]],"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"display_avatar_url":{"type":"string","description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"https://example.com/avatar.png"},"display_name":{"type":"string","description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"Бот Поддержки"}}}},"$ref":"#/components/schemas/MessageUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","display_avatar_url","display_name","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред сообщения","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:update","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование сообщения\n\n**Метод**: `PUT`\n\n**Путь**: `/messages/{id}`\n\n> **Скоуп:** `messages:update`\n\nМетод для редактирования сообщения или комментария.\n\nДля редактирования сообщения вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сообщения указываются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `message: object` (required) — Собранный объект параметров редактируемого сообщения\n - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).. Пример: `\"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\"`\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\"`\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `\"logo.png\"`\n - `file_type: string` — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` — Размер файла в байтах, отображаемый пользователю. Пример: `12345`\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800`\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600`\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `5400`\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.. Пример: `[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"}]]`\n - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `\"https://example.com/avatar.png\"`\n - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.. Пример: `\"Бот Поддержки\"`\n\n### Пример\n\n```json\n{\n \"message\": {\n \"content\": \"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n }\n ]\n ],\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/messages/194275\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"message\": {\n \"content\": \"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n }\n ]\n ],\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сообщение\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920`\n - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок\n - `thread: object` (required) — Тред сообщения\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null`\n - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null`\n - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null`\n - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/messages/{id}","summary":"Удаление сообщения","scope":"messages:delete","plan":null,"auth":true,"paginated":false,"command":"pachca messages delete","docLink":"https://dev.pachca.com/api/messages/delete","describe":"# DELETE /messages/{id} — Удаление сообщения\n\n> **Скоуп:** `messages:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages delete 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/delete\nПолная справка: `pachca api DELETE /messages/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/messages/{id}","description":"Удаление сообщения\n\nМетод для удаления сообщения.\n\nУдаление сообщения доступно отправителю, админам и редакторам в чате. В личных сообщениях оба пользователя являются редакторами. Ограничений по давности отправки сообщения нет.\n\nДля удаления сообщения вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:delete","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление сообщения\n\n**Метод**: `DELETE`\n\n**Путь**: `/messages/{id}`\n\n> **Скоуп:** `messages:delete`\n\nМетод для удаления сообщения.\n\nУдаление сообщения доступно отправителю, админам и редакторам в чате. В личных сообщениях оба пользователя являются редакторами. Ограничений по давности отправки сообщения нет.\n\nДля удаления сообщения вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/messages/194275\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/link_previews","summary":"Unfurl (разворачивание ссылок)","scope":"link_previews:write","plan":null,"auth":true,"paginated":false,"command":"pachca messages unfurl","docLink":"https://dev.pachca.com/api/messages/unfurl","describe":"# POST /messages/{id}/link_previews — Unfurl (разворачивание ссылок)\n\n> **Скоуп:** `link_previews:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Тело запроса\n\n- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.\n **Структура значений Record:**\n - `title: string` (required) — Заголовок\n - `description: string` (required) — Описание\n - `image_url: string` — Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image)\n - `image: object` — Изображение\n - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](POST /direct_url)\n - `name: string` (required) — Название изображения (рекомендуется писать вместе с расширением)\n - `size: integer, int32` — Размер изображения в байтах\n\n## Эквивалентная команда\n\n```bash\npachca messages unfurl 194275 \\\n --link-previews='{\"https://website.com/articles/123\":{\"title\":\"Статья: Отправка файлов\",\"description\":\"Пример отправки файлов на удаленный сервер\",\"image_url\":\"https://website.com/img/landing.png\",\"image\":{\"key\":\"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\",\"name\":\"files-to-server.jpg\",\"size\":695604}}}' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/unfurl\nПолная справка: `pachca api POST /messages/{id}/link_previews --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/link_previews","description":"Unfurl (разворачивание ссылок)\n\nМетод для создания предпросмотров ссылок в сообщениях. Доступен только для Unfurl-ботов.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на разворачивание ссылок","required":["link_previews"],"properties":{"link_previews":{"type":"object","description":"`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.","x-record-key-example":"https://website.com/articles/123","additionalProperties":{"type":"object","description":"Данные для предпросмотра ссылки","required":["title","description"],"properties":{"title":{"type":"string","description":"Заголовок","example":"Статья: Отправка файлов"},"description":{"type":"string","description":"Описание","example":"Пример отправки файлов на удаленный сервер"},"image_url":{"type":"string","description":"Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image)","example":"https://website.com/img/landing.png"},"image":{"type":"object","description":"Изображение","required":["key","name"],"properties":{"key":{"type":"string","description":"Путь к изображению, полученный в результате [загрузки файла](POST /direct_url)","example":"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}"},"name":{"type":"string","description":"Название изображения (рекомендуется писать вместе с расширением)","example":"files-to-server.jpg"},"size":{"type":"integer","format":"int32","description":"Размер изображения в байтах","example":695604}}}},"$ref":"#/components/schemas/LinkPreview"}}},"$ref":"#/components/schemas/LinkPreviewsRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"link_previews:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Unfurl (разворачивание ссылок)\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/link_previews`\n\n> **Скоуп:** `link_previews:write`\n\nМетод для создания предпросмотров ссылок в сообщениях. Доступен только для Unfurl-ботов.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.\n **Структура значений Record:**\n - `title: string` (required) — Заголовок. Пример: `\"Статья: Отправка файлов\"`\n - `description: string` (required) — Описание. Пример: `\"Пример отправки файлов на удаленный сервер\"`\n - `image_url: string` — Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image). Пример: `\"https://website.com/img/landing.png\"`\n - `image: object` — Изображение\n - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](POST /direct_url). Пример: `\"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\"`\n - `name: string` (required) — Название изображения (рекомендуется писать вместе с расширением). Пример: `\"files-to-server.jpg\"`\n - `size: integer, int32` — Размер изображения в байтах. Пример: `695604`\n\n### Пример\n\n```json\n{\n \"link_previews\": {\n \"https://website.com/articles/123\": {\n \"title\": \"Статья: Отправка файлов\",\n \"description\": \"Пример отправки файлов на удаленный сервер\",\n \"image_url\": \"https://website.com/img/landing.png\",\n \"image\": {\n \"key\": \"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\",\n \"name\": \"files-to-server.jpg\",\n \"size\": 695604\n }\n }\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275/link_previews\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"link_previews\": {\n \"https://website.com/articles/123\": {\n \"title\": \"Статья: Отправка файлов\",\n \"description\": \"Пример отправки файлов на удаленный сервер\",\n \"image_url\": \"https://website.com/img/landing.png\",\n \"image\": {\n \"key\": \"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\",\n \"name\": \"files-to-server.jpg\",\n \"size\": 695604\n }\n }\n }\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/pin","summary":"Закрепление сообщения","scope":"pins:write","plan":null,"auth":true,"paginated":false,"command":"pachca messages pin","docLink":"https://dev.pachca.com/api/messages/pin","describe":"# POST /messages/{id}/pin — Закрепление сообщения\n\n> **Скоуп:** `pins:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages pin 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/pin\nПолная справка: `pachca api POST /messages/{id}/pin --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/pin","description":"Закрепление сообщения\n\nМетод для закрепления сообщения в чате.\n\nДля закрепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error"}},"requirements":{"scope":"pins:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Закрепление сообщения\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/pin`\n\n> **Скоуп:** `pins:write`\n\nМетод для закрепления сообщения в чате.\n\nДля закрепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/messages/194275/pin\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n"},{"method":"DELETE","path":"/messages/{id}/pin","summary":"Открепление сообщения","scope":"pins:write","plan":null,"auth":true,"paginated":false,"command":"pachca messages unpin","docLink":"https://dev.pachca.com/api/messages/unpin","describe":"# DELETE /messages/{id}/pin — Открепление сообщения\n\n> **Скоуп:** `pins:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages unpin 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/unpin\nПолная справка: `pachca api DELETE /messages/{id}/pin --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/messages/{id}/pin","description":"Открепление сообщения\n\nМетод для открепления сообщения из чата.\n\nДля открепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"pins:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Открепление сообщения\n\n**Метод**: `DELETE`\n\n**Путь**: `/messages/{id}/pin`\n\n> **Скоуп:** `pins:write`\n\nМетод для открепления сообщения из чата.\n\nДля открепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/messages/194275/pin\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/reactions","summary":"Добавление реакции","scope":"reactions:write","plan":null,"auth":true,"paginated":false,"command":"pachca reactions add","docLink":"https://dev.pachca.com/api/reactions/add","describe":"# POST /messages/{id}/reactions — Добавление реакции\n\n> **Скоуп:** `reactions:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Тело запроса\n\n- `code: string` (required) — Emoji символ реакции\n- `name: string` — Текстовое имя эмодзи (используется для кастомных эмодзи)\n\n## Эквивалентная команда\n\n```bash\npachca reactions add 7231942 \\\n --code=👍 \\\n --name=:+1: \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/reactions/add\nПолная справка: `pachca api POST /messages/{id}/reactions --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/reactions","description":"Добавление реакции\n\nМетод для добавления реакции на сообщение.\n\nДля добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](DELETE /messages/{id}/reactions).\n\n**Лимиты реакций:**\n\n- Каждый пользователь может установить не более **20 уникальных** реакций\n- Сообщение может иметь не более **30 уникальных** реакций\n- Общее количество реакций на сообщение не может превышать **1000**","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":7231942},"example":7231942}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на добавление реакции","required":["code"],"properties":{"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","example":":+1:"}},"$ref":"#/components/schemas/ReactionRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Реакция на сообщение","required":["user_id","created_at","code","name"],"properties":{"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который добавил реакцию","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-01-20T10:30:00.000Z"},"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Название emoji реакции","example":":+1::skin-tone-1:","nullable":true}},"$ref":"#/components/schemas/Reaction"}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"reactions:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Добавление реакции\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/reactions`\n\n> **Скоуп:** `reactions:write`\n\nМетод для добавления реакции на сообщение.\n\nДля добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](DELETE /messages/{id}/reactions).\n\n**Лимиты реакций:**\n\n- Каждый пользователь может установить не более **20 уникальных** реакций\n- Сообщение может иметь не более **30 уникальных** реакций\n- Общее количество реакций на сообщение не может превышать **1000**\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n- `name: string` — Текстовое имя эмодзи (используется для кастомных эмодзи). Пример: `\":+1:\"`\n\n### Пример\n\n```json\n{\n \"code\": \"👍\",\n \"name\": \":+1:\"\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages/7231942/reactions\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"code\": \"👍\",\n \"name\": \":+1:\"\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил реакцию. Пример: `12`\n- `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-01-20T10:30:00.000Z\"`\n- `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n- `name: string` (required) — Название emoji реакции. Пример: `\":+1::skin-tone-1:\"`\n\n**Пример ответа:**\n\n```json\n{\n \"user_id\": 12,\n \"created_at\": \"2024-01-20T10:30:00.000Z\",\n \"code\": \"👍\",\n \"name\": \":+1::skin-tone-1:\"\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/messages/{id}/reactions","summary":"Удаление реакции","scope":"reactions:write","plan":null,"auth":true,"paginated":false,"command":"pachca reactions remove","docLink":"https://dev.pachca.com/api/reactions/remove","describe":"# DELETE /messages/{id}/reactions — Удаление реакции\n\n> **Скоуп:** `reactions:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n- `code` — query (обязательный): Emoji символ реакции\n- `name` — query: Текстовое имя эмодзи (используется для кастомных эмодзи)\n\n## Эквивалентная команда\n\n```bash\npachca reactions remove 7231942 \\\n --code=👍 \\\n --name=:+1: \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/reactions/remove\nПолная справка: `pachca api DELETE /messages/{id}/reactions --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/messages/{id}/reactions","description":"Удаление реакции\n\nМетод для удаления реакции на сообщение.\n\nДля удаления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения хранятся в виде символов `Emoji`.\n\nУдалять можно только те реакции, которые были поставлены авторизованным пользователем.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":7231942},"example":7231942},{"name":"code","in":"query","description":"Emoji символ реакции","required":true,"schema":{"type":"string","example":"👍"},"example":"👍","explode":false},{"name":"name","in":"query","description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","required":false,"schema":{"type":"string","example":":+1:"},"example":":+1:","explode":false}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"reactions:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление реакции\n\n**Метод**: `DELETE`\n\n**Путь**: `/messages/{id}/reactions`\n\n> **Скоуп:** `reactions:write`\n\nМетод для удаления реакции на сообщение.\n\nДля удаления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения хранятся в виде символов `Emoji`.\n\nУдалять можно только те реакции, которые были поставлены авторизованным пользователем.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n### Query параметры\n\n- `code: string` (required) — Emoji символ реакции\n- `name: string` — Текстовое имя эмодзи (используется для кастомных эмодзи)\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/messages/7231942/reactions?code=👍&name=:+1:\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages/{id}/reactions","summary":"Список реакций","scope":"reactions:read","plan":null,"auth":true,"paginated":true,"command":"pachca reactions list","docLink":"https://dev.pachca.com/api/reactions/list","describe":"# GET /messages/{id}/reactions — Список реакций\n\n> **Скоуп:** `reactions:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca reactions list 194275 \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/reactions/list\nПолная справка: `pachca api GET /messages/{id}/reactions --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages/{id}/reactions","description":"Список реакций\n\nМетод для получения актуального списка реакций на сообщение.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Реакция на сообщение","required":["user_id","created_at","code","name"],"properties":{"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который добавил реакцию","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-01-20T10:30:00.000Z"},"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Название emoji реакции","example":":+1::skin-tone-1:","nullable":true}},"$ref":"#/components/schemas/Reaction"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"reactions:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список реакций\n\n**Метод**: `GET`\n\n**Путь**: `/messages/{id}/reactions`\n\n> **Скоуп:** `reactions:read`\n\nМетод для получения актуального списка реакций на сообщение.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил реакцию. Пример: `12`\n - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-01-20T10:30:00.000Z\"`\n - `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n - `name: string` (required) — Название emoji реакции. Пример: `\":+1::skin-tone-1:\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"user_id\": 12,\n \"created_at\": \"2024-01-20T10:30:00.000Z\",\n \"code\": \"👍\",\n \"name\": \":+1::skin-tone-1:\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages/{id}/read_member_ids","summary":"Список прочитавших сообщение","scope":"messages:read","plan":null,"auth":true,"paginated":true,"command":"pachca read-member list-readers","docLink":"https://dev.pachca.com/api/read-member/list-readers","describe":"# GET /messages/{id}/read_member_ids — Список прочитавших сообщение\n\n> **Скоуп:** `messages:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca read-member list-readers 194275 \\\n --limit=300 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/read-member/list-readers\nПолная справка: `pachca api GET /messages/{id}/read_member_ids --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages/{id}/read_member_ids","description":"Список прочитавших сообщение\n\nМетод для получения актуального списка пользователей, прочитавших сообщение.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":300,"example":300,"minimum":1,"maximum":300},"example":300,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"integer","format":"int32"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список прочитавших сообщение\n\n**Метод**: `GET`\n\n**Путь**: `/messages/{id}/read_member_ids`\n\n> **Скоуп:** `messages:read`\n\nМетод для получения актуального списка пользователей, прочитавших сообщение.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n### Query параметры\n\n- `limit: integer, int32` (default: 300) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit=300\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of integer` (required)\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n 100\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/thread","summary":"Новый тред","scope":"threads:create","plan":null,"auth":true,"paginated":false,"command":"pachca threads add","docLink":"https://dev.pachca.com/api/threads/add","describe":"# POST /messages/{id}/thread — Новый тред\n\n> **Скоуп:** `threads:create`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca threads add 154332686 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/add\nПолная справка: `pachca api POST /messages/{id}/thread --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/thread","description":"Новый тред\n\nМетод для создания нового треда к сообщению.\n\nЕсли у сообщения уже был создан тред, то в ответе на запрос вернётся информация об уже созданном ранее треде.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":154332686},"example":154332686}],"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"threads:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый тред\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/thread`\n\n> **Скоуп:** `threads:create`\n\nМетод для создания нового треда к сообщению.\n\nЕсли у сообщения уже был создан тред, то в ответе на запрос вернётся информация об уже созданном ранее треде.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/messages/154332686/thread\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тред\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686`\n - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": 154332686,\n \"message_chat_id\": 2637266154,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/oauth/token/info","summary":"Информация о токене","scope":null,"plan":null,"auth":true,"paginated":false,"command":"pachca oauth token-info","docLink":"https://dev.pachca.com/api/oauth/token-info","describe":"# GET /oauth/token/info — Информация о токене\n\n## Эквивалентная команда\n\n```bash\npachca oauth token-info \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/oauth/token-info\nПолная справка: `pachca api GET /oauth/token/info --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/oauth/token/info","description":"Информация о токене\n\nМетод для получения информации о текущем OAuth токене, включая его скоупы, дату создания и последнего использования. Токен в ответе маскируется — видны только первые 8 и последние 4 символа.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Токен доступа","required":["id","token","name","user_id","scopes","created_at","revoked_at","expires_in","last_used_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор токена","example":4827},"token":{"type":"string","description":"Маскированный токен (видны первые 8 и последние 4 символа)","example":"cH5kR9mN...x7Qp"},"name":{"type":"string","description":"Пользовательское имя токена","example":"Мой API токен","nullable":true},"user_id":{"type":"integer","format":"int64","description":"Идентификатор владельца токена","example":12},"scopes":{"type":"array","description":"Список скоупов токена","example":["messages:read","chats:read"],"items":{"type":"string","description":"Скоуп доступа OAuth токена","enum":["chats:read","chats:create","chats:update","chats:archive","chats:leave","chat_members:read","chat_members:write","chat_exports:read","chat_exports:write","messages:read","messages:create","messages:update","messages:delete","reactions:read","reactions:write","pins:write","threads:read","threads:create","link_previews:write","users:read","users:create","users:update","users:delete","group_tags:read","group_tags:write","bots:read","bots:write","bot_self:webhook:write","bot_self:write","profile:read","profile_status:read","profile_status:write","profile_avatar:write","user_status:read","user_status:write","user_avatar:write","custom_properties:read","audit_events:read","tasks:read","tasks:create","tasks:update","tasks:delete","files:read","files:write","uploads:write","views:write","webhooks:read","webhooks:write","webhooks:events:read","webhooks:events:delete","search:users","search:chats","search:messages"],"x-enum-descriptions":{"chats:read":"Просмотр чатов и списка чатов","chats:create":"Создание новых чатов","chats:update":"Изменение настроек чата","chats:archive":"Архивация и разархивация чатов","chats:leave":"Выход из чатов","chat_members:read":"Просмотр участников чата","chat_members:write":"Добавление, изменение и удаление участников чата","chat_exports:read":"Скачивание экспортов чата","chat_exports:write":"Создание экспортов чата","messages:read":"Просмотр сообщений в чатах","messages:create":"Отправка сообщений","messages:update":"Редактирование сообщений","messages:delete":"Удаление сообщений","reactions:read":"Просмотр реакций на сообщения","reactions:write":"Добавление и удаление реакций","pins:write":"Закрепление и открепление сообщений","threads:read":"Просмотр тредов (комментариев)","threads:create":"Создание тредов (комментариев)","link_previews:write":"Unfurl (разворачивание ссылок)","views:write":"Открытие форм (представлений)","users:read":"Просмотр информации о сотрудниках и списка сотрудников","users:create":"Создание новых сотрудников","users:update":"Редактирование данных сотрудника","users:delete":"Удаление сотрудников","group_tags:read":"Просмотр тегов","group_tags:write":"Создание, редактирование и удаление тегов","bots:read":"Просмотр ботов","bots:write":"Управление ботами","bot_self:webhook:write":"Самостоятельное управление адресом вебхука бота","bot_self:write":"Самостоятельное управление настройками бота","profile:read":"Просмотр информации о своем профиле","profile_status:read":"Просмотр статуса профиля","profile_status:write":"Изменение и удаление статуса профиля","profile_avatar:write":"Изменение и удаление аватара профиля","user_status:read":"Просмотр статуса сотрудника","user_status:write":"Изменение и удаление статуса сотрудника","user_avatar:write":"Изменение и удаление аватара сотрудника","custom_properties:read":"Просмотр дополнительных полей","audit_events:read":"Просмотр журнала аудита","tasks:read":"Просмотр задач","tasks:create":"Создание задач","tasks:update":"Изменение задачи","tasks:delete":"Удаление задачи","files:read":"Скачивание файлов","files:write":"Загрузка файлов","uploads:write":"Получение данных для загрузки файлов","webhooks:read":"Просмотр вебхуков","webhooks:write":"Создание и управление вебхуками","webhooks:events:read":"Просмотр лога вебхуков","webhooks:events:delete":"Удаление записи в логе вебхука","search:users":"Поиск сотрудников","search:chats":"Поиск чатов","search:messages":"Поиск сообщений"},"x-scope-roles":{"chats:read":["owner","admin","user","bot"],"chats:create":["owner","admin","user","bot"],"chats:update":["owner","admin","user","bot"],"chats:archive":["owner","admin","user","bot"],"chats:leave":["owner","admin","user","bot"],"chat_members:read":["owner","admin","user","bot"],"chat_members:write":["owner","admin","user","bot"],"chat_exports:read":["owner"],"chat_exports:write":["owner"],"messages:read":["owner","admin","user","bot"],"messages:create":["owner","admin","user","bot"],"messages:update":["owner","admin","user","bot"],"messages:delete":["owner","admin","user","bot"],"reactions:read":["owner","admin","user","bot"],"reactions:write":["owner","admin","user","bot"],"pins:write":["owner","admin","user","bot"],"threads:read":["owner","admin","user","bot"],"threads:create":["owner","admin","user","bot"],"link_previews:write":["owner","admin","user","bot"],"views:write":["owner","admin","user","bot"],"users:read":["owner","admin","user","bot"],"users:create":["owner","admin"],"users:update":["owner","admin"],"users:delete":["owner","admin"],"group_tags:read":["owner","admin"],"group_tags:write":["owner","admin"],"bots:read":["owner","admin","user"],"bots:write":["owner","admin","user"],"bot_self:webhook:write":["bot"],"bot_self:write":["bot"],"profile:read":["owner","admin","user","bot"],"profile_status:read":["owner","admin","user","bot"],"profile_status:write":["owner","admin","user","bot"],"profile_avatar:write":["owner","admin","user","bot"],"user_status:read":["owner","admin"],"user_status:write":["owner","admin"],"user_avatar:write":["owner","admin"],"custom_properties:read":["owner","admin","user","bot"],"audit_events:read":["owner"],"tasks:read":["owner","admin","user","bot"],"tasks:create":["owner","admin","user","bot"],"tasks:update":["owner","admin","user","bot"],"tasks:delete":["owner","admin","user","bot"],"files:read":["owner","admin","user","bot"],"files:write":["owner","admin","user","bot"],"uploads:write":["owner","admin","user","bot"],"webhooks:read":["owner","admin","user","bot"],"webhooks:write":["owner","admin","user","bot"],"webhooks:events:read":["owner","admin","user","bot"],"webhooks:events:delete":["owner","admin","user","bot"],"search:users":["owner","admin","user","bot"],"search:chats":["owner","admin","user","bot"],"search:messages":["owner","admin","user","bot"]},"$ref":"#/components/schemas/OAuthScope"}},"created_at":{"type":"string","format":"date-time","description":"Дата создания токена","example":"2025-01-15T10:30:00.000Z"},"revoked_at":{"type":"string","format":"date-time","description":"Дата отзыва токена","example":null,"nullable":true},"expires_in":{"type":"integer","format":"int32","description":"Время жизни токена в секундах","example":null,"nullable":true},"last_used_at":{"type":"string","format":"date-time","description":"Дата последнего использования токена","example":"2025-02-24T14:20:00.000Z","nullable":true}},"$ref":"#/components/schemas/AccessTokenInfo"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"paginated":false},"docs":"# Информация о токене\n\n**Метод**: `GET`\n\n**Путь**: `/oauth/token/info`\n\nМетод для получения информации о текущем OAuth токене, включая его скоупы, дату создания и последнего использования. Токен в ответе маскируется — видны только первые 8 и последние 4 символа.\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/oauth/token/info\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Токен доступа\n - `id: integer, int64` (required) — Идентификатор токена. Пример: `4827`\n - `token: string` (required) — Маскированный токен (видны первые 8 и последние 4 символа). Пример: `\"cH5kR9mN...x7Qp\"`\n - `name: string` (required) — Пользовательское имя токена. Пример: `\"Мой API токен\"`\n - `user_id: integer, int64` (required) — Идентификатор владельца токена. Пример: `12`\n - `scopes: array of string` (required) — Список скоупов токена. Пример: `[\"messages:read\",\"chats:read\"]`\n - `created_at: date-time` (required) — Дата создания токена. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `revoked_at: date-time` (required) — Дата отзыва токена. Пример: `null`\n - `expires_in: integer, int32` (required) — Время жизни токена в секундах. Пример: `null`\n - `last_used_at: date-time` (required) — Дата последнего использования токена. Пример: `\"2025-02-24T14:20:00.000Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 4827,\n \"token\": \"cH5kR9mN...x7Qp\",\n \"name\": \"Мой API токен\",\n \"user_id\": 12,\n \"scopes\": [\n \"messages:read\",\n \"chats:read\"\n ],\n \"created_at\": \"2025-01-15T10:30:00.000Z\",\n \"revoked_at\": null,\n \"expires_in\": null,\n \"last_used_at\": \"2025-02-24T14:20:00.000Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/profile","summary":"Свой профиль","scope":"profile:read","plan":null,"auth":true,"paginated":false,"command":"pachca profile get","docLink":"https://dev.pachca.com/api/profile/get","describe":"# GET /profile — Свой профиль\n\n> **Скоуп:** `profile:read`\n\n## Эквивалентная команда\n\n```bash\npachca profile get \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/get\nПолная справка: `pachca api GET /profile --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/profile","description":"Свой профиль\n\nМетод для получения информации о своем профиле.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"profile:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Свой профиль\n\n**Метод**: `GET`\n\n**Путь**: `/profile`\n\n> **Скоуп:** `profile:read`\n\nМетод для получения информации о своем профиле.\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/profile\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"PUT","path":"/profile/avatar","summary":"Загрузка своего аватара","scope":"profile_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile update-avatar","docLink":"https://dev.pachca.com/api/profile/update-avatar","describe":"# PUT /profile/avatar — Загрузка своего аватара\n\n> **Скоуп:** `profile_avatar:write`\n\n## Тело запроса\n\n- `image: binary` (required) — Файл изображения для аватара\n\n## Эквивалентная команда\n\n```bash\npachca profile update-avatar \\\n --file=./image.jpg \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/update-avatar\nПолная справка: `pachca api PUT /profile/avatar --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/profile/avatar","description":"Загрузка своего аватара\n\nМетод для загрузки или обновления аватара своего профиля. Файл передается в формате `multipart/form-data`.","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary","description":"Файл изображения для аватара"}}}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Данные аватара","required":["image_url"],"properties":{"image_url":{"type":"string","description":"URL аватара","example":"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg"}},"$ref":"#/components/schemas/AvatarData"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"profile_avatar:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Загрузка своего аватара\n\n**Метод**: `PUT`\n\n**Путь**: `/profile/avatar`\n\n> **Скоуп:** `profile_avatar:write`\n\nМетод для загрузки или обновления аватара своего профиля. Файл передается в формате `multipart/form-data`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `multipart/form-data`\n\n### Схема\n\n- `image: binary` (required) — Файл изображения для аватара\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/profile/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -F \"image=@filename.png\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Данные аватара\n - `image_url: string` (required) — URL аватара. Пример: `\"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"image_url\": \"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/profile/avatar","summary":"Удаление своего аватара","scope":"profile_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile delete-avatar","docLink":"https://dev.pachca.com/api/profile/delete-avatar","describe":"# DELETE /profile/avatar — Удаление своего аватара\n\n> **Скоуп:** `profile_avatar:write`\n\n## Эквивалентная команда\n\n```bash\npachca profile delete-avatar \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/delete-avatar\nПолная справка: `pachca api DELETE /profile/avatar --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/profile/avatar","description":"Удаление своего аватара\n\nМетод для удаления аватара своего профиля.","parameters":[],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}}},"requirements":{"scope":"profile_avatar:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление своего аватара\n\n**Метод**: `DELETE`\n\n**Путь**: `/profile/avatar`\n\n> **Скоуп:** `profile_avatar:write`\n\nМетод для удаления аватара своего профиля.\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/profile/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/profile/status","summary":"Свой статус","scope":"profile_status:read","plan":null,"auth":true,"paginated":false,"command":"pachca profile get-status","docLink":"https://dev.pachca.com/api/profile/get-status","describe":"# GET /profile/status — Свой статус\n\n> **Скоуп:** `profile_status:read`\n\n## Эквивалентная команда\n\n```bash\npachca profile get-status \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/get-status\nПолная справка: `pachca api GET /profile/status --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/profile/status","description":"Свой статус\n\nМетод для получения информации о своем статусе.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"profile_status:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Свой статус\n\n**Метод**: `GET`\n\n**Путь**: `/profile/status`\n\n> **Скоуп:** `profile_status:read`\n\nМетод для получения информации о своем статусе.\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/profile/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"PUT","path":"/profile/status","summary":"Новый свой статус","scope":"profile_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile update-status","docLink":"https://dev.pachca.com/api/profile/update-status","describe":"# PUT /profile/status — Новый свой статус\n\n> **Скоуп:** `profile_status:write`\n\n## Тело запроса\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса\n - `title: string` (required, max length: 50) — Текст статуса\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ\n - `is_away: boolean` — Режим «Нет на месте»\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.\n\n## Эквивалентная команда\n\n```bash\npachca profile update-status \\\n --emoji=🎮 \\\n --title=\"Очень занят\" \\\n --expires-at=2024-04-08T10:00:00.000Z \\\n --is-away \\\n --away-message=\"Вернусь после 15:00\" \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/update-status\nПолная справка: `pachca api PUT /profile/status --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/profile/status","description":"Новый свой статус\n\nМетод для установки себе нового статуса.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на установку статуса","required":["status"],"properties":{"status":{"type":"object","required":["emoji","title"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z"},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":true},"away_message":{"type":"string","description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.","example":"Вернусь после 15:00","maxLength":1024}}}},"$ref":"#/components/schemas/StatusUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"profile_status:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый свой статус\n\n**Метод**: `PUT`\n\n**Путь**: `/profile/status`\n\n> **Скоуп:** `profile_status:write`\n\nМетод для установки себе нового статуса.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` — Режим «Нет на месте». Пример: `true`\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.. Пример: `\"Вернусь после 15:00\"`\n\n### Пример\n\n```json\n{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/profile/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/profile/status","summary":"Удаление своего статуса","scope":"profile_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile delete-status","docLink":"https://dev.pachca.com/api/profile/delete-status","describe":"# DELETE /profile/status — Удаление своего статуса\n\n> **Скоуп:** `profile_status:write`\n\n## Эквивалентная команда\n\n```bash\npachca profile delete-status \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/delete-status\nПолная справка: `pachca api DELETE /profile/status --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/profile/status","description":"Удаление своего статуса\n\nМетод для удаления своего статуса.","parameters":[],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"profile_status:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление своего статуса\n\n**Метод**: `DELETE`\n\n**Путь**: `/profile/status`\n\n> **Скоуп:** `profile_status:write`\n\nМетод для удаления своего статуса.\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/profile/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/search/chats","summary":"Поиск чатов","scope":"search:chats","plan":null,"auth":true,"paginated":true,"command":"pachca search list-chats","docLink":"https://dev.pachca.com/api/search/list-chats","describe":"# GET /search/chats — Поиск чатов\n\n> **Скоуп:** `search:chats`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Текст поискового запроса\n- `limit` — query: Количество возвращаемых результатов за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n- `order` — query: Направление сортировки\n- `created_from` — query: Фильтр по дате создания (от)\n- `created_to` — query: Фильтр по дате создания (до)\n- `active` — query: Фильтр по активности чата\n- `chat_subtype` — query: Фильтр по типу чата\n- `personal` — query: Фильтр по личным чатам\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca search list-chats \\\n --query=Разработка \\\n --limit=10 \\\n --order=desc \\\n --created-from=2025-01-01T00:00:00.000Z \\\n --created-to=2025-02-01T00:00:00.000Z \\\n --active \\\n --chat-subtype=discussion \\\n --no-personal \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/search/list-chats\nПолная справка: `pachca api GET /search/chats --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/search/chats","description":"Поиск чатов\n\nМетод для полнотекстового поиска каналов и бесед.","parameters":[{"name":"query","in":"query","description":"Текст поискового запроса","required":false,"schema":{"type":"string","example":"Разработка"},"example":"Разработка","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых результатов за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":100,"example":10,"maximum":100},"example":10,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"example":"desc","$ref":"#/components/schemas/SortOrder"},"example":"desc","explode":false},{"name":"created_from","in":"query","description":"Фильтр по дате создания (от)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"created_to","in":"query","description":"Фильтр по дате создания (до)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"active","in":"query","description":"Фильтр по активности чата","required":false,"schema":{"type":"boolean","example":true},"example":true,"explode":false},{"name":"chat_subtype","in":"query","description":"Фильтр по типу чата","required":false,"schema":{"type":"string","description":"Тип чата","enum":["discussion","thread"],"x-enum-descriptions":{"discussion":"Канал или беседа","thread":"Тред"},"example":"discussion","$ref":"#/components/schemas/ChatSubtype"},"example":"discussion","explode":false},{"name":"personal","in":"query","description":"Фильтр по личным чатам","required":false,"schema":{"type":"boolean","example":false},"example":false,"explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа поисковых результатов с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}},"meta":{"type":"object","description":"Мета-информация для пагинации поисковых результатов","required":["total","paginate"],"properties":{"total":{"type":"integer","format":"int32","description":"Общее количество найденных результатов","example":42},"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"}}}},"$ref":"#/components/schemas/SearchPaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"search:chats","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Поиск чатов\n\n**Метод**: `GET`\n\n**Путь**: `/search/chats`\n\n> **Скоуп:** `search:chats`\n\nМетод для полнотекстового поиска каналов и бесед.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Текст поискового запроса\n- `limit: integer, int32` (default: 100) — Количество возвращаемых результатов за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n- `order: string` — Направление сортировки\n Значения: `asc`, `desc`\n- `created_from: date-time` — Фильтр по дате создания (от)\n- `created_to: date-time` — Фильтр по дате создания (до)\n- `active: boolean` — Фильтр по активности чата\n- `chat_subtype: string` — Фильтр по типу чата\n Значения: `discussion`, `thread`\n- `personal: boolean` — Фильтр по личным чатам\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/search/chats?query=Разработка&limit=10&order=desc&created_from=2025-01-01T00:00:00.000Z&created_to=2025-02-01T00:00:00.000Z&active=true&chat_subtype=discussion&personal=false\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n- `meta: object` (required) — Мета-информация для пагинации поисковых результатов\n - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42`\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n ],\n \"meta\": {\n \"total\": 42,\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/search/messages","summary":"Поиск сообщений","scope":"search:messages","plan":null,"auth":true,"paginated":true,"command":"pachca search list-messages","docLink":"https://dev.pachca.com/api/search/list-messages","describe":"# GET /search/messages — Поиск сообщений\n\n> **Скоуп:** `search:messages`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Текст поискового запроса\n- `limit` — query: Количество возвращаемых результатов за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n- `order` — query: Направление сортировки\n- `sort` — query: Сортировка результатов\n- `created_from` — query: Фильтр по дате создания (от)\n- `created_to` — query: Фильтр по дате создания (до)\n- `chat_ids` — query: Фильтр по ID чатов\n- `user_ids` — query: Фильтр по ID авторов сообщений\n- `active` — query: Фильтр по активности чата\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca search list-messages \\\n --query=футболки \\\n --limit=10 \\\n --order=desc \\\n --sort=created_at \\\n --created-from=2025-01-01T00:00:00.000Z \\\n --created-to=2025-02-01T00:00:00.000Z \\\n --chat-ids=198,334 \\\n --user-ids=12,185 \\\n --active \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/search/list-messages\nПолная справка: `pachca api GET /search/messages --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/search/messages","description":"Поиск сообщений\n\nМетод для полнотекстового поиска сообщений.","parameters":[{"name":"query","in":"query","description":"Текст поискового запроса","required":false,"schema":{"type":"string","example":"футболки"},"example":"футболки","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых результатов за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":200,"example":10,"maximum":200},"example":10,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"example":"desc","$ref":"#/components/schemas/SortOrder"},"example":"desc","explode":false},{"name":"sort","in":"query","description":"Сортировка результатов","required":false,"schema":{"default":"created_at","allOf":[{"type":"string","description":"Сортировка результатов поиска сообщений","enum":["created_at","relevance"],"x-enum-descriptions":{"created_at":"По дате создания (хронология)","relevance":"По релевантности"},"$ref":"#/components/schemas/MessageSearchSort"}]},"example":"created_at","explode":false},{"name":"created_from","in":"query","description":"Фильтр по дате создания (от)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"created_to","in":"query","description":"Фильтр по дате создания (до)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"chat_ids","in":"query","description":"Фильтр по ID чатов","required":false,"schema":{"type":"array","example":[198,334],"items":{"type":"integer","format":"int32"}},"example":[198,334],"explode":false},{"name":"user_ids","in":"query","description":"Фильтр по ID авторов сообщений","required":false,"schema":{"type":"array","example":[12,185],"items":{"type":"integer","format":"int32"}},"example":[12,185],"explode":false},{"name":"active","in":"query","description":"Фильтр по активности чата","required":false,"schema":{"type":"boolean","example":true},"example":true,"explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа поисковых результатов с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","display_avatar_url","display_name","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред сообщения","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}},"meta":{"type":"object","description":"Мета-информация для пагинации поисковых результатов","required":["total","paginate"],"properties":{"total":{"type":"integer","format":"int32","description":"Общее количество найденных результатов","example":42},"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"}}}},"$ref":"#/components/schemas/SearchPaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"search:messages","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Поиск сообщений\n\n**Метод**: `GET`\n\n**Путь**: `/search/messages`\n\n> **Скоуп:** `search:messages`\n\nМетод для полнотекстового поиска сообщений.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Текст поискового запроса\n- `limit: integer, int32` (default: 200) — Количество возвращаемых результатов за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n- `order: string` — Направление сортировки\n Значения: `asc`, `desc`\n- `sort: string` (default: created_at) — Сортировка результатов\n- `created_from: date-time` — Фильтр по дате создания (от)\n- `created_to: date-time` — Фильтр по дате создания (до)\n- `chat_ids: array` — Фильтр по ID чатов\n- `user_ids: array` — Фильтр по ID авторов сообщений\n- `active: boolean` — Фильтр по активности чата\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/search/messages?query=футболки&limit=10&order=desc&sort=created_at&created_from=2025-01-01T00:00:00.000Z&created_to=2025-02-01T00:00:00.000Z&chat_ids[]=198&chat_ids[]=334&user_ids[]=12&user_ids[]=185&active=true\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` — Ширина изображения в пикселях. Пример: `1920`\n - `height: integer, int32` — Высота изображения в пикселях. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required) — Массив строк, каждая из которых представлена массивом кнопок\n - `thread: object` (required) — Тред сообщения\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. Пример: `null`\n - `parent_message_id: integer, int32` (required) — Идентификатор сообщения, к которому написан ответ. Пример: `null`\n - `display_avatar_url: string` (required) — Ссылка на аватарку отправителя сообщения. Пример: `null`\n - `display_name: string` (required) — Полное имя отправителя сообщения. Пример: `null`\n - `changed_at: date-time` (required) — Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `null`\n- `meta: object` (required) — Мета-информация для пагинации поисковых результатов\n - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42`\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": null\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n ],\n \"meta\": {\n \"total\": 42,\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/search/users","summary":"Поиск сотрудников","scope":"search:users","plan":null,"auth":true,"paginated":true,"command":"pachca search list-users","docLink":"https://dev.pachca.com/api/search/list-users","describe":"# GET /search/users — Поиск сотрудников\n\n> **Скоуп:** `search:users`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Текст поискового запроса\n- `limit` — query: Количество возвращаемых результатов за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n- `sort` — query: Сортировка результатов\n- `order` — query: Направление сортировки\n- `created_from` — query: Фильтр по дате создания (от)\n- `created_to` — query: Фильтр по дате создания (до)\n- `company_roles` — query: Фильтр по ролям сотрудников\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca search list-users \\\n --query=Олег \\\n --limit=10 \\\n --sort=by_score \\\n --order=desc \\\n --created-from=2025-01-01T00:00:00.000Z \\\n --created-to=2025-02-01T00:00:00.000Z \\\n --company-roles=admin,user \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/search/list-users\nПолная справка: `pachca api GET /search/users --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/search/users","description":"Поиск сотрудников\n\nМетод для полнотекстового поиска сотрудников по имени, email, должности и другим полям.","parameters":[{"name":"query","in":"query","description":"Текст поискового запроса","required":false,"schema":{"type":"string","example":"Олег"},"example":"Олег","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых результатов за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":200,"example":10,"maximum":200},"example":10,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false},{"name":"sort","in":"query","description":"Сортировка результатов","required":false,"schema":{"type":"string","description":"Сортировка результатов поиска","enum":["by_score","alphabetical","creation"],"x-enum-descriptions":{"by_score":"По релевантности","alphabetical":"По алфавиту","creation":"По дате создания"},"example":"by_score","$ref":"#/components/schemas/SearchSortOrder"},"example":"by_score","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"example":"desc","$ref":"#/components/schemas/SortOrder"},"example":"desc","explode":false},{"name":"created_from","in":"query","description":"Фильтр по дате создания (от)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"created_to","in":"query","description":"Фильтр по дате создания (до)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"company_roles","in":"query","description":"Фильтр по ролям сотрудников","required":false,"schema":{"type":"array","example":["admin","user"],"items":{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}},"example":["admin","user"],"explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа поисковых результатов с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Мета-информация для пагинации поисковых результатов","required":["total","paginate"],"properties":{"total":{"type":"integer","format":"int32","description":"Общее количество найденных результатов","example":42},"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"}}}},"$ref":"#/components/schemas/SearchPaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"search:users","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Поиск сотрудников\n\n**Метод**: `GET`\n\n**Путь**: `/search/users`\n\n> **Скоуп:** `search:users`\n\nМетод для полнотекстового поиска сотрудников по имени, email, должности и другим полям.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Текст поискового запроса\n- `limit: integer, int32` (default: 200) — Количество возвращаемых результатов за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n- `sort: string` — Сортировка результатов\n Значения: `by_score`, `alphabetical`, `creation`\n- `order: string` — Направление сортировки\n Значения: `asc`, `desc`\n- `created_from: date-time` — Фильтр по дате создания (от)\n- `created_to: date-time` — Фильтр по дате создания (до)\n- `company_roles: array` — Фильтр по ролям сотрудников\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10&sort=by_score&order=desc&created_from=2025-01-01T00:00:00.000Z&created_to=2025-02-01T00:00:00.000Z&company_roles[]=admin&company_roles[]=user\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Мета-информация для пагинации поисковых результатов\n - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42`\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"total\": 42,\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"POST","path":"/tasks","summary":"Новое напоминание","scope":"tasks:create","plan":null,"auth":true,"paginated":false,"command":"pachca tasks create","docLink":"https://dev.pachca.com/api/tasks/create","describe":"# POST /tasks — Новое напоминание\n\n> **Скоуп:** `tasks:create`\n\n## Тело запроса\n\n- `task: object` (required) — Собранный объект параметров создаваемого напоминания\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание (по умолчанию — название типа)\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).\n - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно).\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)\n - `chat_id: integer, int32` — Идентификатор чата, к которому привязывается напоминание\n - `all_day: boolean` — Напоминание на весь день (без указания времени)\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required) — Устанавливаемое значение\n\n## Эквивалентная команда\n\n```bash\npachca tasks create \\\n --kind=reminder \\\n --content=\"Забрать со склада 21 заказ\" \\\n --due-at=2020-06-05T12:00:00.000+03:00 \\\n --priority=2 \\\n --performer-ids=12,13 \\\n --chat-id=456 \\\n --no-all-day \\\n --custom-properties='[{\"id\":78,\"value\":\"Синий склад\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/create\nПолная справка: `pachca api POST /tasks --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/tasks","description":"Новое напоминание\n\nМетод для создания нового напоминания.\n\nПри создании напоминания обязательным условием является указания типа напоминания: звонок, встреча, простое напоминание, событие или письмо. При этом не требуется дополнительное описание - вы просто создадите напоминание с соответствующим текстом. Если вы укажите описание напоминания - то именно оно и станет текстом напоминания.\n\nУ напоминания должны быть ответственные, если их не указывать - ответственным назначается вы.\n\nОтветственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](GET /users).\n\nНапоминание можно привязать к чату, указав `chat_id`. Для привязки к чату необходимо быть его участником.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание напоминания","required":["task"],"properties":{"task":{"type":"object","description":"Собранный объект параметров создаваемого напоминания","required":["kind"],"properties":{"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание (по умолчанию — название типа)","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","example":"2020-06-05T12:00:00.000+03:00"},"priority":{"type":"integer","format":"int32","description":"Приоритет: 1, 2 (важно) или 3 (очень важно).","default":1,"example":2},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)","example":[12,13],"items":{"type":"integer","format":"int32"}},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязывается напоминание","example":456},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":78},"value":{"type":"string","description":"Устанавливаемое значение","example":"Синий склад"}}}}}}},"$ref":"#/components/schemas/TaskCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новое напоминание\n\n**Метод**: `POST`\n\n**Путь**: `/tasks`\n\n> **Скоуп:** `tasks:create`\n\nМетод для создания нового напоминания.\n\nПри создании напоминания обязательным условием является указания типа напоминания: звонок, встреча, простое напоминание, событие или письмо. При этом не требуется дополнительное описание - вы просто создадите напоминание с соответствующим текстом. Если вы укажите описание напоминания - то именно оно и станет текстом напоминания.\n\nУ напоминания должны быть ответственные, если их не указывать - ответственным назначается вы.\n\nОтветственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](GET /users).\n\nНапоминание можно привязать к чату, указав `chat_id`. Для привязки к чату необходимо быть его участником.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `task: object` (required) — Собранный объект параметров создаваемого напоминания\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание (по умолчанию — название типа). Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).. Пример: `\"2020-06-05T12:00:00.000+03:00\"`\n - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно).. Пример: `2`\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы). Пример: `[12,13]`\n - `chat_id: integer, int32` — Идентификатор чата, к которому привязывается напоминание. Пример: `456`\n - `all_day: boolean` — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `78`\n - `value: string` (required) — Устанавливаемое значение. Пример: `\"Синий склад\"`\n\n### Пример\n\n```json\n{\n \"task\": {\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12,\n 13\n ],\n \"chat_id\": 456,\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/tasks\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"task\": {\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12,\n 13\n ],\n \"chat_id\": 456,\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Напоминание\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/tasks","summary":"Список напоминаний","scope":"tasks:read","plan":null,"auth":true,"paginated":true,"command":"pachca tasks list","docLink":"https://dev.pachca.com/api/tasks/list","describe":"# GET /tasks — Список напоминаний\n\n> **Скоуп:** `tasks:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca tasks list \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/list\nПолная справка: `pachca api GET /tasks --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/tasks","description":"Список напоминаний\n\nМетод для получения списка напоминаний.","parameters":[{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"tasks:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список напоминаний\n\n**Метод**: `GET`\n\n**Путь**: `/tasks`\n\n> **Скоуп:** `tasks:read`\n\nМетод для получения списка напоминаний.\n\n## Параметры\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/tasks?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/tasks/{id}","summary":"Информация о напоминании","scope":"tasks:read","plan":null,"auth":true,"paginated":false,"command":"pachca tasks get","docLink":"https://dev.pachca.com/api/tasks/get","describe":"# GET /tasks/{id} — Информация о напоминании\n\n> **Скоуп:** `tasks:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор напоминания\n\n## Эквивалентная команда\n\n```bash\npachca tasks get 22283 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/get\nПолная справка: `pachca api GET /tasks/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/tasks/{id}","description":"Информация о напоминании\n\nМетод для получения информации о напоминании.\n\nДля получения напоминания вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор напоминания","required":true,"schema":{"type":"integer","format":"int32","example":22283},"example":22283}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о напоминании\n\n**Метод**: `GET`\n\n**Путь**: `/tasks/{id}`\n\n> **Скоуп:** `tasks:read`\n\nМетод для получения информации о напоминании.\n\nДля получения напоминания вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор напоминания\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/tasks/22283\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Напоминание\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/tasks/{id}","summary":"Редактирование напоминания","scope":"tasks:update","plan":null,"auth":true,"paginated":false,"command":"pachca tasks update","docLink":"https://dev.pachca.com/api/tasks/update","describe":"# PUT /tasks/{id} — Редактирование напоминания\n\n> **Скоуп:** `tasks:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор напоминания\n\n## Тело запроса\n\n- `task: object` (required) — Собранный объект параметров обновляемого напоминания\n - `kind: string` — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).\n - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно).\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»\n - `status: string` — Статус\n Значения: `done` — Выполнено, `undone` — Активно\n - `all_day: boolean` — Напоминание на весь день (без указания времени)\n - `done_at: date-time` — Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required) — Устанавливаемое значение\n\n## Эквивалентная команда\n\n```bash\npachca tasks update 22283 \\\n --content=\"Забрать со склада 21 заказ\" \\\n --due-at=2020-06-05T12:00:00.000+03:00 \\\n --priority=2 \\\n --performer-ids=12 \\\n --status=done \\\n --no-all-day \\\n --done-at=2020-06-05T12:00:00.000Z \\\n --custom-properties='[{\"id\":78,\"value\":\"Синий склад\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/update\nПолная справка: `pachca api PUT /tasks/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/tasks/{id}","description":"Редактирование напоминания\n\nМетод для редактирования напоминания.\n\nДля редактирования напоминания вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры напоминания указываются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор напоминания","required":true,"schema":{"type":"integer","format":"int32","example":22283},"example":22283}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на обновление напоминания","required":["task"],"properties":{"task":{"type":"object","description":"Собранный объект параметров обновляемого напоминания","properties":{"kind":{"description":"Тип","default":"reminder","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","example":"2020-06-05T12:00:00.000+03:00"},"priority":{"type":"integer","format":"int32","description":"Приоритет: 1, 2 (важно) или 3 (очень важно).","example":2},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"status":{"description":"Статус","example":"done","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"done_at":{"type":"string","format":"date-time","description":"Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-05T12:00:00.000Z"},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":78},"value":{"type":"string","description":"Устанавливаемое значение","example":"Синий склад"}}}}}}},"$ref":"#/components/schemas/TaskUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:update","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование напоминания\n\n**Метод**: `PUT`\n\n**Путь**: `/tasks/{id}`\n\n> **Скоуп:** `tasks:update`\n\nМетод для редактирования напоминания.\n\nДля редактирования напоминания вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры напоминания указываются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор напоминания\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `task: object` (required) — Собранный объект параметров обновляемого напоминания\n - `kind: string` — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).. Пример: `\"2020-06-05T12:00:00.000+03:00\"`\n - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно).. Пример: `2`\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные». Пример: `[12]`\n - `status: string` — Статус\n Значения: `done` — Выполнено, `undone` — Активно\n - `all_day: boolean` — Напоминание на весь день (без указания времени). Пример: `false`\n - `done_at: date-time` — Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-05T12:00:00.000Z\"`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `78`\n - `value: string` (required) — Устанавливаемое значение. Пример: `\"Синий склад\"`\n\n### Пример\n\n```json\n{\n \"task\": {\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12\n ],\n \"status\": \"done\",\n \"all_day\": false,\n \"done_at\": \"2020-06-05T12:00:00.000Z\",\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/tasks/22283\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"task\": {\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12\n ],\n \"status\": \"done\",\n \"all_day\": false,\n \"done_at\": \"2020-06-05T12:00:00.000Z\",\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Напоминание\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required) — Идентификатор чата, к которому привязано напоминание. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/tasks/{id}","summary":"Удаление напоминания","scope":"tasks:delete","plan":null,"auth":true,"paginated":false,"command":"pachca tasks delete","docLink":"https://dev.pachca.com/api/tasks/delete","describe":"# DELETE /tasks/{id} — Удаление напоминания\n\n> **Скоуп:** `tasks:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор напоминания\n\n## Эквивалентная команда\n\n```bash\npachca tasks delete 22283 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/delete\nПолная справка: `pachca api DELETE /tasks/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/tasks/{id}","description":"Удаление напоминания\n\nМетод для удаления напоминания.\n\nДля удаления напоминания вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор напоминания","required":true,"schema":{"type":"integer","format":"int32","example":22283},"example":22283}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:delete","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление напоминания\n\n**Метод**: `DELETE`\n\n**Путь**: `/tasks/{id}`\n\n> **Скоуп:** `tasks:delete`\n\nМетод для удаления напоминания.\n\nДля удаления напоминания вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор напоминания\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/tasks/22283\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/threads","summary":"Новый самостоятельный тред","scope":"threads:create","plan":null,"auth":true,"paginated":false,"command":"pachca threads create","docLink":"https://dev.pachca.com/api/threads/create","describe":"# POST /threads — Новый самостоятельный тред\n\n> **Скоуп:** `threads:create`\n\n## Эквивалентная команда\n\n```bash\npachca threads create \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/create\nПолная справка: `pachca api POST /threads --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/threads","description":"Новый самостоятельный тред\n\nМетод для создания самостоятельного треда — треда, не связанного с каким-либо сообщением.\n\nТело запроса не требуется. Создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`.","parameters":[],"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}}},"example":{"data":{"id":265142,"chat_id":2637266155,"message_id":null,"message_chat_id":null,"updated_at":"2023-02-01T19:20:47.204Z"}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"threads:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый самостоятельный тред\n\n**Метод**: `POST`\n\n**Путь**: `/threads`\n\n> **Скоуп:** `threads:create`\n\nМетод для создания самостоятельного треда — треда, не связанного с каким-либо сообщением.\n\nТело запроса не требуется. Создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`.\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/threads\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тред\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686`\n - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": 154332686,\n \"message_chat_id\": 2637266154,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/threads","summary":"Список тредов","scope":"threads:read","plan":null,"auth":true,"paginated":true,"command":"pachca threads list","docLink":"https://dev.pachca.com/api/threads/list","describe":"# GET /threads — Список тредов\n\n> **Скоуп:** `threads:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `last_message_at_after` — query: Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before` — query: Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca threads list \\\n --last-message-at-after=2025-01-01T00:00:00.000Z \\\n --last-message-at-before=2025-02-01T00:00:00.000Z \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/list\nПолная справка: `pachca api GET /threads --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/threads","description":"Список тредов\n\nМетод для получения списка доступных тредов.\n\nВозвращаются треды, у которых вы являетесь участником чата треда либо чата, в котором был создан тред. Публичные чаты, в которых вы не состоите, в выдачу не попадают — чтобы такой тред попал в список, нужно быть участником чата треда или чата, в котором был создан тред.\n\nСортировка — по убыванию времени последнего сообщения в треде.","parameters":[{"name":"last_message_at_after","in":"query","description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"last_message_at_before","in":"query","description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"threads:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список тредов\n\n**Метод**: `GET`\n\n**Путь**: `/threads`\n\n> **Скоуп:** `threads:read`\n\nМетод для получения списка доступных тредов.\n\nВозвращаются треды, у которых вы являетесь участником чата треда либо чата, в котором был создан тред. Публичные чаты, в которых вы не состоите, в выдачу не попадают — чтобы такой тред попал в список, нужно быть участником чата треда или чата, в котором был создан тред.\n\nСортировка — по убыванию времени последнего сообщения в треде.\n\n## Параметры\n\n### Query параметры\n\n- `last_message_at_after: date-time` — Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before: date-time` — Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01-01T00:00:00.000Z&last_message_at_before=2025-02-01T00:00:00.000Z&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686`\n - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": 154332686,\n \"message_chat_id\": 2637266154,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/threads/{id}","summary":"Информация о треде","scope":"threads:read","plan":null,"auth":true,"paginated":false,"command":"pachca threads get","docLink":"https://dev.pachca.com/api/threads/get","describe":"# GET /threads/{id} — Информация о треде\n\n> **Скоуп:** `threads:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор треда\n\n## Эквивалентная команда\n\n```bash\npachca threads get 265142 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/get\nПолная справка: `pachca api GET /threads/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/threads/{id}","description":"Информация о треде\n\nМетод для получения информации о треде.\n\nДля получения треда вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор треда","required":true,"schema":{"type":"integer","format":"int32","example":265142},"example":265142}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"threads:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о треде\n\n**Метод**: `GET`\n\n**Путь**: `/threads/{id}`\n\n> **Скоуп:** `threads:read`\n\nМетод для получения информации о треде.\n\nДля получения треда вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор треда\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/threads/265142\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тред\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `154332686`\n - `message_chat_id: integer, int64` (required) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": 154332686,\n \"message_chat_id\": 2637266154,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/uploads","summary":"Получение подписи, ключа и других параметров","scope":"uploads:write","plan":null,"auth":true,"paginated":false,"command":"pachca files uploads","docLink":"https://dev.pachca.com/api/files/uploads","describe":"# POST /uploads — Получение подписи, ключа и других параметров\n\n> **Скоуп:** `uploads:write`\n\n## Эквивалентная команда\n\n```bash\npachca files uploads \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/files/uploads\nПолная справка: `pachca api POST /uploads --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/uploads","description":"Получение подписи, ключа и других параметров\n\nМетод для получения подписи, ключа и других параметров, необходимых для загрузки файла.\n\nДанный метод необходимо использовать для загрузки каждого файла.","parameters":[],"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Параметры для загрузки файла","required":["Content-Disposition","acl","policy","x-amz-credential","x-amz-algorithm","x-amz-date","x-amz-signature","key","direct_url"],"properties":{"Content-Disposition":{"type":"string","description":"Используемый заголовок (в данном запросе — attachment)","example":"attachment"},"acl":{"type":"string","description":"Уровень безопасности (в данном запросе — private)","example":"private"},"policy":{"type":"string","description":"Уникальная policy для загрузки файла","example":"eyJloNBpcmF0aW9uIjoiMjAyPi0xMi0wOFQwNjo1NzozNFHusCJjb82kaXRpb25zIjpbeyJidWNrZXQiOiJwYWNoY2EtcHJhYy11cGxvYWRzOu0sWyJzdGFydHMtd3l4aCIsIiRrZXkiLCJhdHRhY8hlcy9maWxlcy1xODUyMSJdLHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImF0dGFjaG1lbnQifSx2ImFjbCI3InByaXZhdGUifSx7IngtYW16LWNyZWRlbnRpYWwi2iIxNDIxNTVfc3RhcGx4LzIwMjIxMTI0L2J1LTFhL5MzL1F2czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjytQVdTNC1ITUFDLVNIQTI1NiJ7LHsieC1hbXotZGF0ZSI6IjIwMjIxMTI0VDA2NTczNFoifV12"},"x-amz-credential":{"type":"string","description":"x-amz-credential для загрузки файла","example":"286471_server/20211122/kz-6x/s3/aws4_request"},"x-amz-algorithm":{"type":"string","description":"Используемый алгоритм (в данном запросе — AWS4-HMAC-SHA256)","example":"AWS4-HMAC-SHA256"},"x-amz-date":{"type":"string","description":"Уникальный x-amz-date для загрузки файла","example":"20211122T065734Z"},"x-amz-signature":{"type":"string","description":"Уникальная подпись для загрузки файла","example":"87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475"},"key":{"type":"string","description":"Уникальный ключ для загрузки файла","example":"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}"},"direct_url":{"type":"string","description":"Адрес для загрузки файла","example":"https://api.pachca.com/api/v3/direct_upload"}},"$ref":"#/components/schemas/UploadParams"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"uploads:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Получение подписи, ключа и других параметров\n\n**Метод**: `POST`\n\n**Путь**: `/uploads`\n\n> **Скоуп:** `uploads:write`\n\nМетод для получения подписи, ключа и других параметров, необходимых для загрузки файла.\n\nДанный метод необходимо использовать для загрузки каждого файла.\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/uploads\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `Content-Disposition: string` (required) — Используемый заголовок (в данном запросе — attachment). Пример: `\"attachment\"`\n- `acl: string` (required) — Уровень безопасности (в данном запросе — private). Пример: `\"private\"`\n- `policy: string` (required) — Уникальная policy для загрузки файла. Пример: `\"eyJloNBpcmF0aW9uIjoiMjAyPi0xMi0wOFQwNjo1NzozNFHusCJjb82kaXRpb25zIjpbeyJidWNrZXQiOiJwYWNoY2EtcHJhYy11cGxvYWRzOu0sWyJzdGFydHMtd3l4aCIsIiRrZXkiLCJhdHRhY8hlcy9maWxlcy1xODUyMSJdLHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImF0dGFjaG1lbnQifSx2ImFjbCI3InByaXZhdGUifSx7IngtYW16LWNyZWRlbnRpYWwi2iIxNDIxNTVfc3RhcGx4LzIwMjIxMTI0L2J1LTFhL5MzL1F2czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjytQVdTNC1ITUFDLVNIQTI1NiJ7LHsieC1hbXotZGF0ZSI6IjIwMjIxMTI0VDA2NTczNFoifV12\"`\n- `x-amz-credential: string` (required) — x-amz-credential для загрузки файла. Пример: `\"286471_server/20211122/kz-6x/s3/aws4_request\"`\n- `x-amz-algorithm: string` (required) — Используемый алгоритм (в данном запросе — AWS4-HMAC-SHA256). Пример: `\"AWS4-HMAC-SHA256\"`\n- `x-amz-date: string` (required) — Уникальный x-amz-date для загрузки файла. Пример: `\"20211122T065734Z\"`\n- `x-amz-signature: string` (required) — Уникальная подпись для загрузки файла. Пример: `\"87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475\"`\n- `key: string` (required) — Уникальный ключ для загрузки файла. Пример: `\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}\"`\n- `direct_url: string` (required) — Адрес для загрузки файла. Пример: `\"https://api.pachca.com/api/v3/direct_upload\"`\n\n**Пример ответа:**\n\n```json\n{\n \"Content-Disposition\": \"attachment\",\n \"acl\": \"private\",\n \"policy\": \"eyJloNBpcmF0aW9uIjoiMjAyPi0xMi0wOFQwNjo1NzozNFHusCJjb82kaXRpb25zIjpbeyJidWNrZXQiOiJwYWNoY2EtcHJhYy11cGxvYWRzOu0sWyJzdGFydHMtd3l4aCIsIiRrZXkiLCJhdHRhY8hlcy9maWxlcy1xODUyMSJdLHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImF0dGFjaG1lbnQifSx2ImFjbCI3InByaXZhdGUifSx7IngtYW16LWNyZWRlbnRpYWwi2iIxNDIxNTVfc3RhcGx4LzIwMjIxMTI0L2J1LTFhL5MzL1F2czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjytQVdTNC1ITUFDLVNIQTI1NiJ7LHsieC1hbXotZGF0ZSI6IjIwMjIxMTI0VDA2NTczNFoifV12\",\n \"x-amz-credential\": \"286471_server/20211122/kz-6x/s3/aws4_request\",\n \"x-amz-algorithm\": \"AWS4-HMAC-SHA256\",\n \"x-amz-date\": \"20211122T065734Z\",\n \"x-amz-signature\": \"87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475\",\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}\",\n \"direct_url\": \"https://api.pachca.com/api/v3/direct_upload\"\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"POST","path":"/users","summary":"Новый сотрудник","scope":"users:create","plan":null,"auth":true,"paginated":false,"command":"pachca users create","docLink":"https://dev.pachca.com/api/users/create","describe":"# POST /users — Новый сотрудник\n\n> **Скоуп:** `users:create`\n\n## Тело запроса\n\n- `user: object` (required)\n - `first_name: string` (max length: 255) — Имя\n - `last_name: string` (max length: 255) — Фамилия\n - `email: string` (required, max length: 255) — Электронная почта\n - `phone_number: string` (max length: 255) — Телефон\n - `nickname: string` (max length: 255) — Имя пользователя\n - `department: string` (max length: 255) — Департамент\n - `title: string` — Должность\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (default: false) — Деактивация пользователя\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику\n - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required, max length: 768) — Устанавливаемое значение\n- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.\n\n## Эквивалентная команда\n\n```bash\npachca users create \\\n --first-name=Олег \\\n --last-name=Петров \\\n --email=olegp@example.com \\\n --phone-number=+79001234567 \\\n --nickname=olegpetrov \\\n --department=Продукт \\\n --title=CIO \\\n --role=user \\\n --list-tags=Product,Design \\\n --chat-ids=12345 \\\n --custom-properties='[{\"id\":1678,\"value\":\"Санкт-Петербург\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/create\nПолная справка: `pachca api POST /users --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/users","description":"Новый сотрудник\n\nМетод для создания нового сотрудника в вашей компании.\n\nВы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).\n\nЧерез параметр `chat_ids` сотрудника можно сразу добавить в указанные чаты. Чтобы создать гостя, передайте `role: \"guest\"` — для этой роли `chat_ids` обязателен и должен содержать ровно один активный чат, в который у токена есть право добавлять участников. При нарушении правил гостевого доступа возвращается `400` с ошибкой по полю `chat_ids`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание сотрудника","required":["user"],"properties":{"user":{"type":"object","required":["email"],"properties":{"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","maxLength":255},"email":{"type":"string","description":"Электронная почта","example":"olegp@example.com","maxLength":255},"phone_number":{"type":"string","description":"Телефон","example":"+79001234567","maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO"},"role":{"description":"Уровень доступа","example":"user","allOf":[{"type":"string","description":"Роль пользователя, допустимая при создании сотрудника. В отличие от редактирования, при создании можно назначить роль `guest` — в этом случае параметр `chat_ids` обязателен и должен содержать ровно один чат.","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserCreateRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","default":false,"example":false},"list_tags":{"type":"array","description":"Массив тегов, привязываемых к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"chat_ids":{"type":"array","description":"Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.","example":[12345],"items":{"type":"integer","format":"int32"}},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"value":{"type":"string","description":"Устанавливаемое значение","example":"Санкт-Петербург","maxLength":768}}}}}},"skip_email_notify":{"type":"boolean","description":"Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.","default":false,"example":false}},"$ref":"#/components/schemas/UserCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:create","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Новый сотрудник\n\n**Метод**: `POST`\n\n**Путь**: `/users`\n\n> **Скоуп:** `users:create`\n\nМетод для создания нового сотрудника в вашей компании.\n\nВы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).\n\nЧерез параметр `chat_ids` сотрудника можно сразу добавить в указанные чаты. Чтобы создать гостя, передайте `role: \"guest\"` — для этой роли `chat_ids` обязателен и должен содержать ровно один активный чат, в который у токена есть право добавлять участников. При нарушении правил гостевого доступа возвращается `400` с ошибкой по полю `chat_ids`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `user: object` (required)\n - `first_name: string` (max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `email: string` (required, max length: 255) — Электронная почта. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (max length: 255) — Телефон. Пример: `\"+79001234567\"`\n - `nickname: string` (max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `department: string` (max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` — Должность. Пример: `\"CIO\"`\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (default: false) — Деактивация пользователя. Пример: `false`\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.. Пример: `[12345]`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `value: string` (required, max length: 768) — Устанавливаемое значение. Пример: `\"Санкт-Петербург\"`\n- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.. Пример: `false`\n\n### Пример\n\n```json\n{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"chat_ids\": [\n 12345\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/users\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"chat_ids\": [\n 12345\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/users","summary":"Список сотрудников","scope":"users:read","plan":null,"auth":true,"paginated":true,"command":"pachca users list","docLink":"https://dev.pachca.com/api/users/list","describe":"# GET /users — Список сотрудников\n\n> **Скоуп:** `users:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca users list \\\n --query=Олег \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/list\nПолная справка: `pachca api GET /users --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/users","description":"Список сотрудников\n\nМетод для получения актуального списка сотрудников вашей компании.","parameters":[{"name":"query","in":"query","description":"Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).","required":false,"schema":{"type":"string","example":"Олег"},"example":"Олег","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список сотрудников\n\n**Метод**: `GET`\n\n**Путь**: `/users`\n\n> **Скоуп:** `users:read`\n\nМетод для получения актуального списка сотрудников вашей компании.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/users/{id}","summary":"Информация о сотруднике","scope":"users:read","plan":null,"auth":true,"paginated":false,"command":"pachca users get","docLink":"https://dev.pachca.com/api/users/get","describe":"# GET /users/{id} — Информация о сотруднике\n\n> **Скоуп:** `users:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users get 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/get\nПолная справка: `pachca api GET /users/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/users/{id}","description":"Информация о сотруднике\n\nМетод для получения информации о сотруднике.\n\nДля получения сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о сотруднике\n\n**Метод**: `GET`\n\n**Путь**: `/users/{id}`\n\n> **Скоуп:** `users:read`\n\nМетод для получения информации о сотруднике.\n\nДля получения сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/users/12\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/users/{id}","summary":"Редактирование сотрудника","scope":"users:update","plan":null,"auth":true,"paginated":false,"command":"pachca users update","docLink":"https://dev.pachca.com/api/users/update","describe":"# PUT /users/{id} — Редактирование сотрудника\n\n> **Скоуп:** `users:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `user: object` (required) — Собранный объект параметров редактируемого сотрудника\n - `first_name: string` (max length: 255) — Имя\n - `last_name: string` (max length: 255) — Фамилия\n - `email: string` (max length: 255) — Электронная почта\n - `phone_number: string` (max length: 255) — Телефон\n - `nickname: string` (max length: 255) — Имя пользователя\n - `department: string` (max length: 255) — Департамент\n - `title: string` — Должность\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость\n - `suspended: boolean` (default: false) — Деактивация пользователя\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required, max length: 768) — Устанавливаемое значение\n\n## Эквивалентная команда\n\n```bash\npachca users update 12 \\\n --first-name=Олег \\\n --last-name=Петров \\\n --email=olegpetrov@example.com \\\n --phone-number=+79001234567 \\\n --nickname=olegpetrov \\\n --department=\"Отдел разработки\" \\\n --title=\"Старший разработчик\" \\\n --role=user \\\n --list-tags=Product \\\n --custom-properties='[{\"id\":1678,\"value\":\"Санкт-Петербург\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/update\nПолная справка: `pachca api PUT /users/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/users/{id}","description":"Редактирование сотрудника\n\nМетод для редактирования сотрудника.\n\nДля редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).","parameters":[{"name":"id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на редактирование сотрудника","required":["user"],"properties":{"user":{"type":"object","description":"Собранный объект параметров редактируемого сотрудника","properties":{"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","maxLength":255},"email":{"type":"string","description":"Электронная почта","example":"olegpetrov@example.com","maxLength":255},"phone_number":{"type":"string","description":"Телефон","example":"+79001234567","maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"department":{"type":"string","description":"Департамент","example":"Отдел разработки","maxLength":255},"title":{"type":"string","description":"Должность","example":"Старший разработчик"},"role":{"description":"Уровень доступа","example":"user","allOf":[{"type":"string","description":"Роль пользователя, допустимая при редактировании сотрудника. Роль `guest` недоступна для установки через API при редактировании — назначить роль `guest` можно только при создании сотрудника (см. `UserCreateRole`).","enum":["admin","user","multi_guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость"},"$ref":"#/components/schemas/UserRoleInput"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","default":false,"example":false},"list_tags":{"type":"array","description":"Массив тегов, привязываемых к сотруднику","example":["Product"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"value":{"type":"string","description":"Устанавливаемое значение","example":"Санкт-Петербург","maxLength":768}}}}}}},"$ref":"#/components/schemas/UserUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение","example":"Санкт-Петербург","maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:update","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Редактирование сотрудника\n\n**Метод**: `PUT`\n\n**Путь**: `/users/{id}`\n\n> **Скоуп:** `users:update`\n\nМетод для редактирования сотрудника.\n\nДля редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `user: object` (required) — Собранный объект параметров редактируемого сотрудника\n - `first_name: string` (max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `email: string` (max length: 255) — Электронная почта. Пример: `\"olegpetrov@example.com\"`\n - `phone_number: string` (max length: 255) — Телефон. Пример: `\"+79001234567\"`\n - `nickname: string` (max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `department: string` (max length: 255) — Департамент. Пример: `\"Отдел разработки\"`\n - `title: string` — Должность. Пример: `\"Старший разработчик\"`\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость\n - `suspended: boolean` (default: false) — Деактивация пользователя. Пример: `false`\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику. Пример: `[\"Product\"]`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `value: string` (required, max length: 768) — Устанавливаемое значение. Пример: `\"Санкт-Петербург\"`\n\n### Пример\n\n```json\n{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegpetrov@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Отдел разработки\",\n \"title\": \"Старший разработчик\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/users/12\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegpetrov@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Отдел разработки\",\n \"title\": \"Старший разработчик\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (required, max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.. Пример: `\"+79001234567\"`\n - `department: string` (required, max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` (required) — Должность. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, max length: 768) — Значение. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, max length: 32) — Часовой пояс пользователя. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required) — Ссылка на скачивание аватарки пользователя. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/users/{id}","summary":"Удаление сотрудника","scope":"users:delete","plan":null,"auth":true,"paginated":false,"command":"pachca users delete","docLink":"https://dev.pachca.com/api/users/delete","describe":"# DELETE /users/{id} — Удаление сотрудника\n\n> **Скоуп:** `users:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users delete 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/delete\nПолная справка: `pachca api DELETE /users/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/users/{id}","description":"Удаление сотрудника\n\nМетод для удаления сотрудника.\n\nДля удаления сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:delete","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление сотрудника\n\n**Метод**: `DELETE`\n\n**Путь**: `/users/{id}`\n\n> **Скоуп:** `users:delete`\n\nМетод для удаления сотрудника.\n\nДля удаления сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/users/12\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/users/{user_id}/avatar","summary":"Загрузка аватара сотрудника","scope":"user_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca users update-avatar","docLink":"https://dev.pachca.com/api/users/update-avatar","describe":"# PUT /users/{user_id}/avatar — Загрузка аватара сотрудника\n\n> **Скоуп:** `user_avatar:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `image: binary` (required) — Файл изображения для аватара\n\n## Эквивалентная команда\n\n```bash\npachca users update-avatar 12 \\\n --file=./image.jpg \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/update-avatar\nПолная справка: `pachca api PUT /users/{user_id}/avatar --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/users/{user_id}/avatar","description":"Загрузка аватара сотрудника\n\nМетод для загрузки или обновления аватара сотрудника. Файл передается в формате `multipart/form-data`.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary","description":"Файл изображения для аватара"}}}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Данные аватара","required":["image_url"],"properties":{"image_url":{"type":"string","description":"URL аватара","example":"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg"}},"$ref":"#/components/schemas/AvatarData"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_avatar:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Загрузка аватара сотрудника\n\n**Метод**: `PUT`\n\n**Путь**: `/users/{user_id}/avatar`\n\n> **Скоуп:** `user_avatar:write`\n\nМетод для загрузки или обновления аватара сотрудника. Файл передается в формате `multipart/form-data`.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `multipart/form-data`\n\n### Схема\n\n- `image: binary` (required) — Файл изображения для аватара\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/users/12/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -F \"image=@filename.png\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Данные аватара\n - `image_url: string` (required) — URL аватара. Пример: `\"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"image_url\": \"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/users/{user_id}/avatar","summary":"Удаление аватара сотрудника","scope":"user_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca users remove-avatar","docLink":"https://dev.pachca.com/api/users/remove-avatar","describe":"# DELETE /users/{user_id}/avatar — Удаление аватара сотрудника\n\n> **Скоуп:** `user_avatar:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users remove-avatar 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/remove-avatar\nПолная справка: `pachca api DELETE /users/{user_id}/avatar --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/users/{user_id}/avatar","description":"Удаление аватара сотрудника\n\nМетод для удаления аватара сотрудника.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_avatar:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление аватара сотрудника\n\n**Метод**: `DELETE`\n\n**Путь**: `/users/{user_id}/avatar`\n\n> **Скоуп:** `user_avatar:write`\n\nМетод для удаления аватара сотрудника.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/users/12/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/users/{user_id}/status","summary":"Статус сотрудника","scope":"user_status:read","plan":null,"auth":true,"paginated":false,"command":"pachca users get-status","docLink":"https://dev.pachca.com/api/users/get-status","describe":"# GET /users/{user_id}/status — Статус сотрудника\n\n> **Скоуп:** `user_status:read`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users get-status 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/get-status\nПолная справка: `pachca api GET /users/{user_id}/status --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/users/{user_id}/status","description":"Статус сотрудника\n\nМетод для получения информации о статусе сотрудника.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_status:read","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Статус сотрудника\n\n**Метод**: `GET`\n\n**Путь**: `/users/{user_id}/status`\n\n> **Скоуп:** `user_status:read`\n\nМетод для получения информации о статусе сотрудника.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/users/12/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/users/{user_id}/status","summary":"Новый статус сотрудника","scope":"user_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca users update-status","docLink":"https://dev.pachca.com/api/users/update-status","describe":"# PUT /users/{user_id}/status — Новый статус сотрудника\n\n> **Скоуп:** `user_status:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса\n - `title: string` (required, max length: 50) — Текст статуса\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ\n - `is_away: boolean` — Режим «Нет на месте»\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.\n\n## Эквивалентная команда\n\n```bash\npachca users update-status 12 \\\n --emoji=🎮 \\\n --title=\"Очень занят\" \\\n --expires-at=2024-04-08T10:00:00.000Z \\\n --is-away \\\n --away-message=\"Вернусь после 15:00\" \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/update-status\nПолная справка: `pachca api PUT /users/{user_id}/status --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/users/{user_id}/status","description":"Новый статус сотрудника\n\nМетод для установки нового статуса сотруднику.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на установку статуса","required":["status"],"properties":{"status":{"type":"object","required":["emoji","title"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z"},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":true},"away_message":{"type":"string","description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.","example":"Вернусь после 15:00","maxLength":1024}}}},"$ref":"#/components/schemas/StatusUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_status:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Новый статус сотрудника\n\n**Метод**: `PUT`\n\n**Путь**: `/users/{user_id}/status`\n\n> **Скоуп:** `user_status:write`\n\nМетод для установки нового статуса сотруднику.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` — Режим «Нет на месте». Пример: `true`\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.. Пример: `\"Вернусь после 15:00\"`\n\n### Пример\n\n```json\n{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/users/12/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/users/{user_id}/status","summary":"Удаление статуса сотрудника","scope":"user_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca users remove-status","docLink":"https://dev.pachca.com/api/users/remove-status","describe":"# DELETE /users/{user_id}/status — Удаление статуса сотрудника\n\n> **Скоуп:** `user_status:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users remove-status 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/remove-status\nПолная справка: `pachca api DELETE /users/{user_id}/status --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/users/{user_id}/status","description":"Удаление статуса сотрудника\n\nМетод для удаления статуса сотрудника.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_status:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление статуса сотрудника\n\n**Метод**: `DELETE`\n\n**Путь**: `/users/{user_id}/status`\n\n> **Скоуп:** `user_status:write`\n\nМетод для удаления статуса сотрудника.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/users/12/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/views/open","summary":"Открытие представления","scope":"views:write","plan":null,"auth":true,"paginated":false,"command":"pachca views open","docLink":"https://dev.pachca.com/api/views/open","describe":"# POST /views/open — Открытие представления\n\n> **Скоуп:** `views:write`\n\n## Тело запроса\n\n- `type: string` (required) — Способ открытия представления\n Значения: `modal` — Модальное окно\n- `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)\n- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.\n- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.\n- `view: object` (required) — Собранный объект представления\n - `title: string` (required, max length: 24) — Заголовок представления\n - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.\n - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы\n - `blocks: array (union)` (required, max items: 100) — Массив блоков представления\n **Возможные типы элементов:**\n\n - **ViewBlockHeader**: Блок header — заголовок\n - `type: string` (required) — Тип блока\n Значения: `header` — Для заголовков всегда header\n - `text: string` (required, max length: 150) — Текст заголовка\n - **ViewBlockPlainText**: Блок plain_text — обычный текст\n - `type: string` (required) — Тип блока\n Значения: `plain_text` — Для обычного текста всегда plain_text\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockMarkdown**: Блок markdown — форматированный текст\n - `type: string` (required) — Тип блока\n Значения: `markdown` — Для форматированного текста всегда markdown\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockDivider**: Блок divider — разделитель\n - `type: string` (required) — Тип блока\n Значения: `divider` — Для разделителя всегда divider\n - **ViewBlockInput**: Блок input — текстовое поле ввода\n - `type: string` (required) — Тип блока\n Значения: `input` — Для текстового поля всегда input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `placeholder: string` (max length: 150) — Подсказка внутри поля ввода, пока оно пустое\n - `multiline: boolean` (default: false) — Многострочное поле\n - `initial_value: string` (max length: 3000) — Начальное значение в поле\n - `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.\n - `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockSelect**: Блок select — выпадающий список\n - `type: string` (required) — Тип блока\n Значения: `select` — Для выпадающего списка всегда select\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к выпадающему списку\n - `options: array of object` (max items: 100) — Массив доступных пунктов в выпадающем списке\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под выпадающим списком серым цветом\n - **ViewBlockRadio**: Блок radio — радиокнопки\n - `type: string` (required) — Тип блока\n Значения: `radio` — Для радиокнопок всегда radio\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе радиокнопок\n - `options: array of object` (max items: 10) — Массив радиокнопок\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой радиокнопок серым цветом\n - **ViewBlockCheckbox**: Блок checkbox — чекбоксы\n - `type: string` (required) — Тип блока\n Значения: `checkbox` — Для чекбоксов всегда checkbox\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе чекбоксов\n - `options: array of object` (max items: 10) — Массив чекбоксов\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `checked: boolean` — Изначально выбранный пункт\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой чекбоксов серым цветом\n - **ViewBlockDate**: Блок date — выбор даты\n - `type: string` (required) — Тип блока\n Значения: `date` — Для выбора даты всегда date\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_date: date` — Начальное значение в поле в формате YYYY-MM-DD\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockTime**: Блок time — выбор времени\n - `type: string` (required) — Тип блока\n Значения: `time` — Для выбора времени всегда time\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_time: string, time` — Начальное значение в поле в формате HH:mm\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockFileInput**: Блок file_input — загрузка файлов\n - `type: string` (required) — Тип блока\n Значения: `file_input` — Для загрузки файлов всегда file_input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, [\"png\",\"jpg\",\"gif\"]). Если это поле не указано, все расширения файлов будут приняты.\n - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n\n## Эквивалентная команда\n\n```bash\npachca views open \\\n --title=\"Уведомление об отпуске\" \\\n --close-text=Закрыть \\\n --submit-text=\"Отправить заявку\" \\\n --blocks='[{\"type\":\"header\",\"text\":\"Основная информация\"},{\"type\":\"plain_text\",\"text\":\"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"},{\"type\":\"markdown\",\"text\":\"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"},{\"type\":\"divider\"},{\"type\":\"input\",\"name\":\"info\",\"label\":\"Описание отпуска\",\"placeholder\":\"Куда собираетесь и что будете делать\",\"multiline\":true,\"initial_value\":\"Начальный текст\",\"min_length\":10,\"max_length\":500,\"required\":true,\"hint\":\"Возможно вам подскаджут, какие места лучше посетить\"},{\"type\":\"select\",\"name\":\"team\",\"label\":\"Выберите команду\",\"options\":[{\"text\":\"Ничего\",\"value\":\"nothing\",\"selected\":true}],\"hint\":\"Выберите одну из команд\"},{\"type\":\"radio\",\"name\":\"accessibility\",\"label\":\"Доступность\",\"options\":[{\"text\":\"Ничего\",\"value\":\"nothing\",\"description\":\"Каждый день бот будет присылать список новых задач в вашей команде\",\"selected\":true}],\"required\":true,\"hint\":\"Если вы не планируете выходить на связь, то выберите вариант Ничего\"},{\"type\":\"checkbox\",\"name\":\"newsletters\",\"label\":\"Рассылки\",\"options\":[{\"text\":\"Ничего\",\"value\":\"nothing\",\"description\":\"Каждый день бот будет присылать список новых задач в вашей команде\",\"checked\":true}],\"hint\":\"Выберите интересующие вас рассылки\"},{\"type\":\"date\",\"name\":\"date_start\",\"label\":\"Дата начала отпуска\",\"initial_date\":\"2025-07-01\",\"required\":true,\"hint\":\"Укажите дату начала отпуска\"},{\"type\":\"time\",\"name\":\"newsletter_time\",\"label\":\"Время рассылки\",\"initial_time\":\"11:00\",\"hint\":\"Укажите, в какое время присылать выбранные рассылки\"},{\"type\":\"file_input\",\"name\":\"request_doc\",\"label\":\"Заявление\",\"filetypes\":[\"pdf\",\"jpg\",\"png\"],\"max_files\":1,\"required\":true,\"hint\":\"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"}]' \\\n --type=modal \\\n --trigger-id=791a056b-006c-49dd-834b-c633fde52fe8 \\\n --private-metadata=\"{\"timeoff_id\":4378}\" \\\n --callback-id=timeoff_reguest_form \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/views/open\nПолная справка: `pachca api POST /views/open --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/views/open","description":"Открытие представления\n\nМетод для открытия модального окна с представлением для пользователя.\n\nЧтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший `trigger_id`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Представление","required":["type","trigger_id","view"],"properties":{"type":{"type":"string","description":"Способ открытия представления","enum":["modal"],"x-enum-descriptions":{"modal":"Модальное окно"},"example":"modal"},"trigger_id":{"type":"string","description":"Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)","example":"791a056b-006c-49dd-834b-c633fde52fe8"},"private_metadata":{"type":"string","description":"Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.","example":"{\"timeoff_id\":4378}","maxLength":3000},"callback_id":{"type":"string","description":"Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.","example":"timeoff_reguest_form","maxLength":255},"view":{"type":"object","description":"Собранный объект представления","required":["title","blocks"],"properties":{"title":{"type":"string","description":"Заголовок представления","example":"Уведомление об отпуске","maxLength":24},"close_text":{"type":"string","description":"Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.","default":"Отменить","example":"Закрыть","maxLength":24},"submit_text":{"type":"string","description":"Текст кнопки отправки формы","default":"Отправить","example":"Отправить заявку","maxLength":24},"blocks":{"type":"array","description":"Массив блоков представления","maxItems":100,"items":{"description":"Union-тип для всех возможных блоков представления","anyOf":[{"type":"object","description":"Блок header — заголовок","required":["type","text"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["header"],"x-enum-descriptions":{"header":"Для заголовков всегда header"},"example":"header"},"text":{"type":"string","description":"Текст заголовка","example":"Основная информация","maxLength":150}},"$ref":"#/components/schemas/ViewBlockHeader"},{"type":"object","description":"Блок plain_text — обычный текст","required":["type","text"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["plain_text"],"x-enum-descriptions":{"plain_text":"Для обычного текста всегда plain_text"},"example":"plain_text"},"text":{"type":"string","description":"Текст","example":"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.","maxLength":12000}},"$ref":"#/components/schemas/ViewBlockPlainText"},{"type":"object","description":"Блок markdown — форматированный текст","required":["type","text"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["markdown"],"x-enum-descriptions":{"markdown":"Для форматированного текста всегда markdown"},"example":"markdown"},"text":{"type":"string","description":"Текст","example":"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)","maxLength":12000}},"$ref":"#/components/schemas/ViewBlockMarkdown"},{"type":"object","description":"Блок divider — разделитель","required":["type"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["divider"],"x-enum-descriptions":{"divider":"Для разделителя всегда divider"},"example":"divider"}},"$ref":"#/components/schemas/ViewBlockDivider"},{"type":"object","description":"Блок input — текстовое поле ввода","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["input"],"x-enum-descriptions":{"input":"Для текстового поля всегда input"},"example":"input"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"info","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Описание отпуска","maxLength":150},"placeholder":{"type":"string","description":"Подсказка внутри поля ввода, пока оно пустое","example":"Куда собираетесь и что будете делать","maxLength":150},"multiline":{"type":"boolean","description":"Многострочное поле","default":false,"example":true},"initial_value":{"type":"string","description":"Начальное значение в поле","example":"Начальный текст","maxLength":3000},"min_length":{"type":"integer","format":"int32","description":"Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.","example":10,"minimum":0,"maximum":3000},"max_length":{"type":"integer","format":"int32","description":"Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.","example":500,"minimum":1,"maximum":3000},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Возможно вам подскаджут, какие места лучше посетить","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockInput"},{"type":"object","description":"Блок select — выпадающий список","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["select"],"x-enum-descriptions":{"select":"Для выпадающего списка всегда select"},"example":"select"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора","example":"team","maxLength":255},"label":{"type":"string","description":"Подпись к выпадающему списку","example":"Выберите команду","maxLength":150},"options":{"type":"array","description":"Массив доступных пунктов в выпадающем списке","maxItems":100,"items":{"type":"object","description":"Пункт выпадающего списка (select). В отличие от radio/checkbox, у пункта select нет подзаголовка `description` — веб его не отображает.","required":["text","value"],"properties":{"text":{"type":"string","description":"Отображаемый текст","example":"Ничего","maxLength":75},"value":{"type":"string","description":"Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта","example":"nothing","maxLength":150},"selected":{"type":"boolean","description":"Изначально выбранный пункт. Только один пункт может быть выбран.","example":true}},"$ref":"#/components/schemas/ViewBlockSelectOption"}},"required":{"type":"boolean","description":"Обязательность","default":false,"example":false},"hint":{"type":"string","description":"Подсказка, которая отображается под выпадающим списком серым цветом","example":"Выберите одну из команд","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockSelect"},{"type":"object","description":"Блок radio — радиокнопки","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["radio"],"x-enum-descriptions":{"radio":"Для радиокнопок всегда radio"},"example":"radio"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора","example":"accessibility","maxLength":255},"label":{"type":"string","description":"Подпись к группе радиокнопок","example":"Доступность","maxLength":150},"options":{"type":"array","description":"Массив радиокнопок","maxItems":10,"items":{"type":"object","description":"Опция для блоков select, radio и checkbox","required":["text","value"],"properties":{"text":{"type":"string","description":"Отображаемый текст","example":"Ничего","maxLength":75},"value":{"type":"string","description":"Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта","example":"nothing","maxLength":150},"description":{"type":"string","description":"Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом","example":"Каждый день бот будет присылать список новых задач в вашей команде","maxLength":75},"selected":{"type":"boolean","description":"Изначально выбранный пункт. Только один пункт может быть выбран.","example":true}},"$ref":"#/components/schemas/ViewBlockSelectableOption"}},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под группой радиокнопок серым цветом","example":"Если вы не планируете выходить на связь, то выберите вариант Ничего","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockRadio"},{"type":"object","description":"Блок checkbox — чекбоксы","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["checkbox"],"x-enum-descriptions":{"checkbox":"Для чекбоксов всегда checkbox"},"example":"checkbox"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора","example":"newsletters","maxLength":255},"label":{"type":"string","description":"Подпись к группе чекбоксов","example":"Рассылки","maxLength":150},"options":{"type":"array","description":"Массив чекбоксов","maxItems":10,"items":{"type":"object","required":["text","value"],"properties":{"text":{"type":"string","description":"Отображаемый текст","example":"Ничего","maxLength":75},"value":{"type":"string","description":"Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта","example":"nothing","maxLength":150},"description":{"type":"string","description":"Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом","example":"Каждый день бот будет присылать список новых задач в вашей команде","maxLength":75},"checked":{"type":"boolean","description":"Изначально выбранный пункт","example":true}},"$ref":"#/components/schemas/ViewBlockCheckboxOption"}},"required":{"type":"boolean","description":"Обязательность","default":false,"example":false},"hint":{"type":"string","description":"Подсказка, которая отображается под группой чекбоксов серым цветом","example":"Выберите интересующие вас рассылки","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockCheckbox"},{"type":"object","description":"Блок date — выбор даты","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["date"],"x-enum-descriptions":{"date":"Для выбора даты всегда date"},"example":"date"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"date_start","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Дата начала отпуска","maxLength":150},"initial_date":{"type":"string","format":"date","description":"Начальное значение в поле в формате YYYY-MM-DD","example":"2025-07-01"},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Укажите дату начала отпуска","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockDate"},{"type":"object","description":"Блок time — выбор времени","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["time"],"x-enum-descriptions":{"time":"Для выбора времени всегда time"},"example":"time"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"newsletter_time","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Время рассылки","maxLength":150},"initial_time":{"type":"string","format":"time","description":"Начальное значение в поле в формате HH:mm","example":"11:00"},"required":{"type":"boolean","description":"Обязательность","default":false,"example":false},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Укажите, в какое время присылать выбранные рассылки","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockTime"},{"type":"object","description":"Блок file_input — загрузка файлов","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["file_input"],"x-enum-descriptions":{"file_input":"Для загрузки файлов всегда file_input"},"example":"file_input"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"request_doc","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Заявление","maxLength":150},"filetypes":{"type":"array","description":"Массив допустимых расширений файлов, указанные в виде строк (например, [\"png\",\"jpg\",\"gif\"]). Если это поле не указано, все расширения файлов будут приняты.","example":["pdf","jpg","png"],"items":{"type":"string"}},"max_files":{"type":"integer","format":"int32","description":"Максимальное количество файлов, которое может загрузить пользователь в это поле.","default":10,"example":1,"minimum":1,"maximum":10},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockFileInput"}],"$ref":"#/components/schemas/ViewBlockUnion"}}}}},"$ref":"#/components/schemas/OpenViewRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result."},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"410":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"views:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Открытие представления\n\n**Метод**: `POST`\n\n**Путь**: `/views/open`\n\n> **Скоуп:** `views:write`\n\nМетод для открытия модального окна с представлением для пользователя.\n\nЧтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший `trigger_id`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `type: string` (required) — Способ открытия представления. Пример: `\"modal\"`\n Значения: `modal` — Модальное окно\n- `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки). Пример: `\"791a056b-006c-49dd-834b-c633fde52fe8\"`\n- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.. Пример: `\"{\"timeoff_id\":4378}\"`\n- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.. Пример: `\"timeoff_reguest_form\"`\n- `view: object` (required) — Собранный объект представления\n - `title: string` (required, max length: 24) — Заголовок представления. Пример: `\"Уведомление об отпуске\"`\n - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.. Пример: `\"Закрыть\"`\n - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы. Пример: `\"Отправить заявку\"`\n - `blocks: array (union)` (required, max items: 100) — Массив блоков представления\n **Возможные типы элементов:**\n\n - **ViewBlockHeader**: Блок header — заголовок\n - `type: string` (required) — Тип блока\n Значения: `header` — Для заголовков всегда header\n - `text: string` (required, max length: 150) — Текст заголовка\n - **ViewBlockPlainText**: Блок plain_text — обычный текст\n - `type: string` (required) — Тип блока\n Значения: `plain_text` — Для обычного текста всегда plain_text\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockMarkdown**: Блок markdown — форматированный текст\n - `type: string` (required) — Тип блока\n Значения: `markdown` — Для форматированного текста всегда markdown\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockDivider**: Блок divider — разделитель\n - `type: string` (required) — Тип блока\n Значения: `divider` — Для разделителя всегда divider\n - **ViewBlockInput**: Блок input — текстовое поле ввода\n - `type: string` (required) — Тип блока\n Значения: `input` — Для текстового поля всегда input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `placeholder: string` (max length: 150) — Подсказка внутри поля ввода, пока оно пустое\n - `multiline: boolean` (default: false) — Многострочное поле\n - `initial_value: string` (max length: 3000) — Начальное значение в поле\n - `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.\n - `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockSelect**: Блок select — выпадающий список\n - `type: string` (required) — Тип блока\n Значения: `select` — Для выпадающего списка всегда select\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к выпадающему списку\n - `options: array of object` (max items: 100) — Массив доступных пунктов в выпадающем списке\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под выпадающим списком серым цветом\n - **ViewBlockRadio**: Блок radio — радиокнопки\n - `type: string` (required) — Тип блока\n Значения: `radio` — Для радиокнопок всегда radio\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе радиокнопок\n - `options: array of object` (max items: 10) — Массив радиокнопок\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой радиокнопок серым цветом\n - **ViewBlockCheckbox**: Блок checkbox — чекбоксы\n - `type: string` (required) — Тип блока\n Значения: `checkbox` — Для чекбоксов всегда checkbox\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе чекбоксов\n - `options: array of object` (max items: 10) — Массив чекбоксов\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `checked: boolean` — Изначально выбранный пункт\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой чекбоксов серым цветом\n - **ViewBlockDate**: Блок date — выбор даты\n - `type: string` (required) — Тип блока\n Значения: `date` — Для выбора даты всегда date\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_date: date` — Начальное значение в поле в формате YYYY-MM-DD\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockTime**: Блок time — выбор времени\n - `type: string` (required) — Тип блока\n Значения: `time` — Для выбора времени всегда time\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_time: string, time` — Начальное значение в поле в формате HH:mm\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockFileInput**: Блок file_input — загрузка файлов\n - `type: string` (required) — Тип блока\n Значения: `file_input` — Для загрузки файлов всегда file_input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, [\"png\",\"jpg\",\"gif\"]). Если это поле не указано, все расширения файлов будут приняты.\n - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n\n### Пример\n\n```json\n{\n \"type\": \"modal\",\n \"trigger_id\": \"791a056b-006c-49dd-834b-c633fde52fe8\",\n \"private_metadata\": \"{\\\"timeoff_id\\\":4378}\",\n \"callback_id\": \"timeoff_reguest_form\",\n \"view\": {\n \"title\": \"Уведомление об отпуске\",\n \"close_text\": \"Закрыть\",\n \"submit_text\": \"Отправить заявку\",\n \"blocks\": [\n {\n \"type\": \"header\",\n \"text\": \"Основная информация\"\n },\n {\n \"type\": \"plain_text\",\n \"text\": \"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"\n },\n {\n \"type\": \"markdown\",\n \"text\": \"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"\n },\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"input\",\n \"name\": \"info\",\n \"label\": \"Описание отпуска\",\n \"placeholder\": \"Куда собираетесь и что будете делать\",\n \"multiline\": true,\n \"initial_value\": \"Начальный текст\",\n \"min_length\": 10,\n \"max_length\": 500,\n \"required\": true,\n \"hint\": \"Возможно вам подскаджут, какие места лучше посетить\"\n },\n {\n \"type\": \"select\",\n \"name\": \"team\",\n \"label\": \"Выберите команду\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"selected\": true\n }\n ],\n \"hint\": \"Выберите одну из команд\"\n },\n {\n \"type\": \"radio\",\n \"name\": \"accessibility\",\n \"label\": \"Доступность\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"selected\": true\n }\n ],\n \"required\": true,\n \"hint\": \"Если вы не планируете выходить на связь, то выберите вариант Ничего\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \"newsletters\",\n \"label\": \"Рассылки\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"checked\": true\n }\n ],\n \"hint\": \"Выберите интересующие вас рассылки\"\n },\n {\n \"type\": \"date\",\n \"name\": \"date_start\",\n \"label\": \"Дата начала отпуска\",\n \"initial_date\": \"2025-07-01\",\n \"required\": true,\n \"hint\": \"Укажите дату начала отпуска\"\n },\n {\n \"type\": \"time\",\n \"name\": \"newsletter_time\",\n \"label\": \"Время рассылки\",\n \"initial_time\": \"11:00\",\n \"hint\": \"Укажите, в какое время присылать выбранные рассылки\"\n },\n {\n \"type\": \"file_input\",\n \"name\": \"request_doc\",\n \"label\": \"Заявление\",\n \"filetypes\": [\n \"pdf\",\n \"jpg\",\n \"png\"\n ],\n \"max_files\": 1,\n \"required\": true,\n \"hint\": \"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/views/open\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"type\": \"modal\",\n \"trigger_id\": \"791a056b-006c-49dd-834b-c633fde52fe8\",\n \"private_metadata\": \"{\\\"timeoff_id\\\":4378}\",\n \"callback_id\": \"timeoff_reguest_form\",\n \"view\": {\n \"title\": \"Уведомление об отпуске\",\n \"close_text\": \"Закрыть\",\n \"submit_text\": \"Отправить заявку\",\n \"blocks\": [\n {\n \"type\": \"header\",\n \"text\": \"Основная информация\"\n },\n {\n \"type\": \"plain_text\",\n \"text\": \"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"\n },\n {\n \"type\": \"markdown\",\n \"text\": \"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"\n },\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"input\",\n \"name\": \"info\",\n \"label\": \"Описание отпуска\",\n \"placeholder\": \"Куда собираетесь и что будете делать\",\n \"multiline\": true,\n \"initial_value\": \"Начальный текст\",\n \"min_length\": 10,\n \"max_length\": 500,\n \"required\": true,\n \"hint\": \"Возможно вам подскаджут, какие места лучше посетить\"\n },\n {\n \"type\": \"select\",\n \"name\": \"team\",\n \"label\": \"Выберите команду\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"selected\": true\n }\n ],\n \"hint\": \"Выберите одну из команд\"\n },\n {\n \"type\": \"radio\",\n \"name\": \"accessibility\",\n \"label\": \"Доступность\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"selected\": true\n }\n ],\n \"required\": true,\n \"hint\": \"Если вы не планируете выходить на связь, то выберите вариант Ничего\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \"newsletters\",\n \"label\": \"Рассылки\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"checked\": true\n }\n ],\n \"hint\": \"Выберите интересующие вас рассылки\"\n },\n {\n \"type\": \"date\",\n \"name\": \"date_start\",\n \"label\": \"Дата начала отпуска\",\n \"initial_date\": \"2025-07-01\",\n \"required\": true,\n \"hint\": \"Укажите дату начала отпуска\"\n },\n {\n \"type\": \"time\",\n \"name\": \"newsletter_time\",\n \"label\": \"Время рассылки\",\n \"initial_time\": \"11:00\",\n \"hint\": \"Укажите, в какое время присылать выбранные рассылки\"\n },\n {\n \"type\": \"file_input\",\n \"name\": \"request_doc\",\n \"label\": \"Заявление\",\n \"filetypes\": [\n \"pdf\",\n \"jpg\",\n \"png\"\n ],\n \"max_files\": 1,\n \"required\": true,\n \"hint\": \"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 410: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/webhooks/events","summary":"История событий","scope":"webhooks:events:read","plan":null,"auth":true,"paginated":true,"command":"pachca bots list-events","docLink":"https://dev.pachca.com/api/bots/list-events","describe":"# GET /webhooks/events — История событий\n\n> **Скоуп:** `webhooks:events:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca bots list-events \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/list-events\nПолная справка: `pachca api GET /webhooks/events --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/webhooks/events","description":"История событий\n\nМетод для получения истории последних событий бота. Данный метод будет полезен, если вы не можете получать события в реальном времени на ваш `URL`, но вам требуется обрабатывать все события, на которые вы подписались.\n\nИстория событий сохраняется только при активном пункте «Сохранять историю событий» во вкладке «Исходящий webhook» настроек бота. При этом указывать «Webhook `URL`» не требуется.\n\nДля получения истории событий конкретного бота вам необходимо знать его `access_token` и использовать его при запросе. Каждое событие представляет `JSON` объект вебхука.","parameters":[{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Событие исходящего вебхука","required":["id","event_type","payload","created_at"],"properties":{"id":{"type":"string","description":"Идентификатор события","example":"01KAJZ2XDSS2S3DSW9EXJZ0TBV"},"event_type":{"type":"string","description":"Тип события","example":"message_new"},"payload":{"description":"Объект вебхука","allOf":[{"description":"Объединение всех типов payload вебхуков","anyOf":[{"type":"object","description":"Структура исходящего вебхука о сообщении","required":["type","id","event","entity_type","entity_id","content","user_id","created_at","url","chat_id","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["message"],"x-enum-descriptions":{"message":"Для сообщений всегда message"},"example":"message"},"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":1245817},"event":{"description":"Тип события","example":"new","allOf":[{"type":"string","description":"Тип события webhook","enum":["new","update","delete"],"x-enum-descriptions":{"new":"Создание","update":"Обновление","delete":"Удаление"},"$ref":"#/components/schemas/WebhookEventType"}]},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение","example":5678},"content":{"type":"string","description":"Текст сообщения","example":"Текст сообщения"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор отправителя сообщения","example":2345},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://pachca.com/chats/1245817/messages/5678"},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":9012},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ","example":3456,"nullable":true},"thread":{"type":"object","description":"Объект с параметрами треда","nullable":true,"allOf":[{"type":"object","description":"Объект треда в вебхуке сообщения","required":["message_id","message_chat_id"],"properties":{"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред","example":12345},"message_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред","example":67890}},"$ref":"#/components/schemas/WebhookMessageThread"}]},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/MessageWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о реакции","required":["type","event","chat_id","message_id","code","name","user_id","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["reaction"],"x-enum-descriptions":{"reaction":"Для реакций всегда reaction"},"example":"reaction"},"event":{"description":"Тип события","example":"new","allOf":[{"type":"string","description":"Тип события webhook для реакций","enum":["new","delete"],"x-enum-descriptions":{"new":"Создание","delete":"Удаление"},"$ref":"#/components/schemas/ReactionEventType"}]},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.","example":9012,"nullable":true},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому относится реакция","example":1245817},"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Название реакции","example":"thumbsup"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который добавил или удалил реакцию","example":2345},"created_at":{"type":"string","format":"date-time","description":"Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.","example":"2025-05-15T14:30:00.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/ReactionWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о нажатии кнопки","required":["type","event","message_id","trigger_id","data","user_id","chat_id","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["button"],"x-enum-descriptions":{"button":"Для кнопки всегда button"},"example":"button"},"event":{"type":"string","description":"Тип события","enum":["click"],"x-enum-descriptions":{"click":"Нажатие кнопки"},"example":"click"},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому относится кнопка","example":1245817},"trigger_id":{"type":"string","description":"Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю","example":"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14"},"data":{"type":"string","description":"Данные нажатой кнопки","example":"button_data"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который нажал кнопку","example":2345},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором была нажата кнопка","example":9012},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/ButtonWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о заполнении формы","required":["type","event","callback_id","private_metadata","chat_id","user_id","data","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["view"],"x-enum-descriptions":{"view":"Для формы всегда view"},"example":"view"},"event":{"type":"string","description":"Тип события","enum":["submit"],"x-enum-descriptions":{"submit":"Отправка формы"},"example":"submit"},"callback_id":{"type":"string","description":"Идентификатор обратного вызова, указанный при открытии представления","example":"timeoff_request_form","nullable":true},"private_metadata":{"type":"string","description":"Приватные метаданные, указанные при открытии представления","example":"{'timeoff_id':4378}","nullable":true},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.","example":9012,"nullable":true},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который отправил форму","example":1235523},"data":{"type":"object","description":"Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные","additionalProperties":{}},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1755075544}},"$ref":"#/components/schemas/ViewSubmitWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука об участниках чата","required":["type","event","chat_id","user_ids","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["chat_member"],"x-enum-descriptions":{"chat_member":"Для участника чата всегда chat_member"},"example":"chat_member"},"event":{"description":"Тип события","example":"add","allOf":[{"type":"string","description":"Тип события webhook для участников","enum":["add","remove"],"x-enum-descriptions":{"add":"Добавление","remove":"Удаление"},"$ref":"#/components/schemas/MemberEventType"}]},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором изменился состав участников","example":9012},"thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда","example":5678,"nullable":true},"user_ids":{"type":"array","description":"Массив идентификаторов пользователей, с которыми произошло событие","example":[2345,6789],"items":{"type":"integer","format":"int32"}},"created_at":{"type":"string","format":"date-time","description":"Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/ChatMemberWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука об участниках пространства","required":["type","event","user_ids","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["company_member"],"x-enum-descriptions":{"company_member":"Для участника пространства всегда company_member"},"example":"company_member"},"event":{"description":"Тип события","example":"invite","allOf":[{"type":"string","description":"Тип события webhook для пользователей","enum":["invite","confirm","update","suspend","activate","delete"],"x-enum-descriptions":{"invite":"Приглашение","confirm":"Подтверждение","update":"Обновление","suspend":"Приостановка","activate":"Активация","delete":"Удаление"},"$ref":"#/components/schemas/UserEventType"}]},"user_ids":{"type":"array","description":"Массив идентификаторов пользователей, с которыми произошло событие","example":[2345,6789],"items":{"type":"integer","format":"int32"}},"created_at":{"type":"string","format":"date-time","description":"Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/CompanyMemberWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о разворачивании ссылок","required":["type","event","chat_id","message_id","links","user_id","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["message"],"x-enum-descriptions":{"message":"Для разворачивания ссылок всегда message"},"example":"message"},"event":{"type":"string","description":"Тип события","enum":["link_shared"],"x-enum-descriptions":{"link_shared":"Обнаружена ссылка на отслеживаемый домен"},"example":"link_shared"},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором обнаружена ссылка","example":23438},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, содержащего ссылку","example":268092},"links":{"type":"array","description":"Массив обнаруженных ссылок на отслеживаемые домены","items":{"type":"object","description":"Объект ссылки в вебхуке разворачивания ссылок","required":["url","domain","skip"],"properties":{"url":{"type":"string","description":"URL ссылки","example":"https://example.com/page1"},"domain":{"type":"string","description":"Домен ссылки","example":"example.com"},"skip":{"type":"boolean","description":"Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью","example":false}},"$ref":"#/components/schemas/WebhookLink"}},"user_id":{"type":"integer","format":"int32","description":"Идентификатор отправителя сообщения","example":2345},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-09-18T19:53:14.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1726685594}},"$ref":"#/components/schemas/LinkSharedWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о видеозвонке","required":["type","event","video_room_id","chat_id","owner_id","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["video_call"],"x-enum-descriptions":{"video_call":"Для видеозвонков всегда video_call"},"example":"video_call"},"event":{"description":"Тип события","example":"started","allOf":[{"type":"string","description":"Тип события видеозвонка","enum":["started","finished","recording_ready"],"x-enum-descriptions":{"started":"Видеозвонок начался","finished":"Видеозвонок завершился","recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/VideoCallEventType"}]},"video_room_id":{"type":"integer","format":"int32","description":"Идентификатор видеозвонка","example":9012},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором проходит видеозвонок","example":23438},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, начавшего видеозвонок","example":2345},"thread":{"type":"object","description":"Объект с параметрами треда, если видеозвонок проходит в треде. `null`, если звонок не в треде.","nullable":true,"allOf":[{"type":"object","description":"Параметры треда, в котором проходит видеозвонок","required":["id","chat_id","message_id","message_chat_id"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор треда","example":12345},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата треда","example":67890},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому создан тред","example":268092},"message_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому создан тред","example":23438}},"$ref":"#/components/schemas/WebhookVideoCallThread"}]},"started_at":{"type":"string","format":"date-time","description":"Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.","example":"2025-05-15T14:30:00.000Z"},"finished_at":{"type":"string","format":"date-time","description":"Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.","example":"2025-05-15T14:45:00.000Z"},"duration":{"type":"integer","format":"int32","description":"Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.","example":900},"members":{"type":"array","description":"Список участников звонка. Присутствует для события finished.","items":{"type":"object","description":"Участник видеозвонка","required":["user_id","joined_at","left_at"],"properties":{"user_id":{"type":"integer","format":"int32","description":"Идентификатор участника","example":2345},"joined_at":{"type":"string","format":"date-time","description":"Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"left_at":{"type":"string","format":"date-time","description":"Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.","example":"2025-05-15T14:45:00.000Z"}},"$ref":"#/components/schemas/WebhookVideoCallMember"}},"recording_id":{"type":"integer","format":"int32","description":"Идентификатор записи. Присутствует для события recording_ready.","example":4567},"file_id":{"type":"integer","format":"int32","description":"Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.","example":89012,"nullable":true},"url":{"type":"string","description":"Прямая ссылка на файл записи. Присутствует для события recording_ready.","example":"https://api.pachca.com/files/89012"},"size":{"type":"integer","format":"int32","description":"Размер файла записи в байтах. Присутствует для события recording_ready.","example":10485760},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/VideoCallWebhookPayload"}],"$ref":"#/components/schemas/WebhookPayloadUnion"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"}},"$ref":"#/components/schemas/WebhookEvent"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"webhooks:events:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# История событий\n\n**Метод**: `GET`\n\n**Путь**: `/webhooks/events`\n\n> **Скоуп:** `webhooks:events:read`\n\nМетод для получения истории последних событий бота. Данный метод будет полезен, если вы не можете получать события в реальном времени на ваш `URL`, но вам требуется обрабатывать все события, на которые вы подписались.\n\nИстория событий сохраняется только при активном пункте «Сохранять историю событий» во вкладке «Исходящий webhook» настроек бота. При этом указывать «Webhook `URL`» не требуется.\n\nДля получения истории событий конкретного бота вам необходимо знать его `access_token` и использовать его при запросе. Каждое событие представляет `JSON` объект вебхука.\n\n## Параметры\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/webhooks/events?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: string` (required) — Идентификатор события. Пример: `\"01KAJZ2XDSS2S3DSW9EXJZ0TBV\"`\n - `event_type: string` (required) — Тип события. Пример: `\"message_new\"`\n - `payload: anyOf` (required) — Объект вебхука\n **Возможные варианты:**\n\n - **MessageWebhookPayload**: Структура исходящего вебхука о сообщении\n - `type: string` (required) — Тип объекта. Пример: `\"message\"`\n Значения: `message` — Для сообщений всегда message\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `1245817`\n - `event: string` (required) — Тип события\n Значения: `new` — Создание, `update` — Обновление, `delete` — Удаление\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение. Пример: `5678`\n - `content: string` (required) — Текст сообщения. Пример: `\"Текст сообщения\"`\n - `user_id: integer, int32` (required) — Идентификатор отправителя сообщения. Пример: `2345`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://pachca.com/chats/1245817/messages/5678\"`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012`\n - `parent_message_id: integer, int32` — Идентификатор сообщения, к которому написан ответ. Пример: `3456`\n - `thread: object` — Объект с параметрами треда\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345`\n - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **ReactionWebhookPayload**: Структура исходящего вебхука о реакции\n - `type: string` (required) — Тип объекта. Пример: `\"reaction\"`\n Значения: `reaction` — Для реакций всегда reaction\n - `event: string` (required) — Тип события\n Значения: `new` — Создание, `delete` — Удаление\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.. Пример: `9012`\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817`\n - `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n - `name: string` (required) — Название реакции. Пример: `\"thumbsup\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345`\n - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **ButtonWebhookPayload**: Структура исходящего вебхука о нажатии кнопки\n - `type: string` (required) — Тип объекта. Пример: `\"button\"`\n Значения: `button` — Для кнопки всегда button\n - `event: string` (required) — Тип события. Пример: `\"click\"`\n Значения: `click` — Нажатие кнопки\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится кнопка. Пример: `1245817`\n - `trigger_id: string` (required) — Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю. Пример: `\"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14\"`\n - `data: string` (required) — Данные нажатой кнопки. Пример: `\"button_data\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который нажал кнопку. Пример: `2345`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка. Пример: `9012`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **ViewSubmitWebhookPayload**: Структура исходящего вебхука о заполнении формы\n - `type: string` (required) — Тип объекта. Пример: `\"view\"`\n Значения: `view` — Для формы всегда view\n - `event: string` (required) — Тип события. Пример: `\"submit\"`\n Значения: `submit` — Отправка формы\n - `callback_id: string` (required) — Идентификатор обратного вызова, указанный при открытии представления. Пример: `\"timeoff_request_form\"`\n - `private_metadata: string` (required) — Приватные метаданные, указанные при открытии представления. Пример: `\"{'timeoff_id':4378}\"`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.. Пример: `9012`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523`\n - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные\n **Структура значений Record:**\n - Тип значения: `any`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544`\n - **ChatMemberWebhookPayload**: Структура исходящего вебхука об участниках чата\n - `type: string` (required) — Тип объекта. Пример: `\"chat_member\"`\n Значения: `chat_member` — Для участника чата всегда chat_member\n - `event: string` (required) — Тип события\n Значения: `add` — Добавление, `remove` — Удаление\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012`\n - `thread_id: integer, int32` — Идентификатор треда. Пример: `5678`\n - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]`\n - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **CompanyMemberWebhookPayload**: Структура исходящего вебхука об участниках пространства\n - `type: string` (required) — Тип объекта. Пример: `\"company_member\"`\n Значения: `company_member` — Для участника пространства всегда company_member\n - `event: string` (required) — Тип события\n Значения: `invite` — Приглашение, `confirm` — Подтверждение, `update` — Обновление, `suspend` — Приостановка, `activate` — Активация, `delete` — Удаление\n - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]`\n - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **LinkSharedWebhookPayload**: Структура исходящего вебхука о разворачивании ссылок\n - `type: string` (required) — Тип объекта. Пример: `\"message\"`\n Значения: `message` — Для разворачивания ссылок всегда message\n - `event: string` (required) — Тип события. Пример: `\"link_shared\"`\n Значения: `link_shared` — Обнаружена ссылка на отслеживаемый домен\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором обнаружена ссылка. Пример: `23438`\n - `message_id: integer, int32` (required) — Идентификатор сообщения, содержащего ссылку. Пример: `268092`\n - `links: array of object` (required) — Массив обнаруженных ссылок на отслеживаемые домены\n - `url: string` (required) — URL ссылки. Пример: `\"https://example.com/page1\"`\n - `domain: string` (required) — Домен ссылки. Пример: `\"example.com\"`\n - `skip: boolean` (required) — Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью. Пример: `false`\n - `user_id: integer, int32` (required) — Идентификатор отправителя сообщения. Пример: `2345`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-09-18T19:53:14.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1726685594`\n - **VideoCallWebhookPayload**: Структура исходящего вебхука о видеозвонке\n - `type: string` (required) — Тип объекта. Пример: `\"video_call\"`\n Значения: `video_call` — Для видеозвонков всегда video_call\n - `event: string` (required) — Тип события\n Значения: `started` — Видеозвонок начался, `finished` — Видеозвонок завершился, `recording_ready` — Запись видеозвонка готова\n - `video_room_id: integer, int32` (required) — Идентификатор видеозвонка. Пример: `9012`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором проходит видеозвонок. Пример: `23438`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, начавшего видеозвонок. Пример: `2345`\n - `thread: object` — Объект с параметрами треда, если видеозвонок проходит в треде. `null`, если звонок не в треде.\n - `id: integer, int32` (required) — Идентификатор треда. Пример: `12345`\n - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890`\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092`\n - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438`\n - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.. Пример: `\"2025-05-15T14:45:00.000Z\"`\n - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.. Пример: `900`\n - `members: array of object` — Список участников звонка. Присутствует для события finished.\n - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345`\n - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.. Пример: `\"2025-05-15T14:45:00.000Z\"`\n - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready.. Пример: `4567`\n - `file_id: integer, int32` — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.. Пример: `89012`\n - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready.. Пример: `\"https://api.pachca.com/files/89012\"`\n - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready.. Пример: `10485760`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`.. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": \"01KAJZ2XDSS2S3DSW9EXJZ0TBV\",\n \"event_type\": \"message_new\",\n \"payload\": {\n \"type\": \"message\",\n \"id\": 1245817,\n \"event\": \"new\",\n \"entity_type\": \"discussion\",\n \"entity_id\": 5678,\n \"content\": \"Текст сообщения\",\n \"user_id\": 2345,\n \"created_at\": \"2025-05-15T14:30:00.000Z\",\n \"url\": \"https://pachca.com/chats/1245817/messages/5678\",\n \"chat_id\": 9012,\n \"parent_message_id\": 3456,\n \"thread\": {\n \"message_id\": 12345,\n \"message_chat_id\": 67890\n },\n \"webhook_timestamp\": 1747574400\n },\n \"created_at\": \"2025-05-15T14:30:00.000Z\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/webhooks/events/{id}","summary":"Удаление события","scope":"webhooks:events:delete","plan":null,"auth":true,"paginated":false,"command":"pachca bots remove-event","docLink":"https://dev.pachca.com/api/bots/remove-event","describe":"# DELETE /webhooks/events/{id} — Удаление события\n\n> **Скоуп:** `webhooks:events:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор события\n\n## Эквивалентная команда\n\n```bash\npachca bots remove-event 01KAJZ2XDSS2S3DSW9EXJZ0TBV \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/remove-event\nПолная справка: `pachca api DELETE /webhooks/events/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/webhooks/events/{id}","description":"Удаление события\n\nДанный метод доступен для работы только с `access_token` бота\n\nМетод для удаления события из истории событий бота.\n\nДля удаления события вам необходимо знать `access_token` бота, которому принадлежит событие, и `id` события.","parameters":[{"name":"id","in":"path","description":"Идентификатор события","required":true,"schema":{"type":"string","example":"01KAJZ2XDSS2S3DSW9EXJZ0TBV"},"example":"01KAJZ2XDSS2S3DSW9EXJZ0TBV"}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"webhooks:events:delete","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление события\n\n**Метод**: `DELETE`\n\n**Путь**: `/webhooks/events/{id}`\n\n> **Скоуп:** `webhooks:events:delete`\n\nДанный метод доступен для работы только с `access_token` бота\n\nМетод для удаления события из истории событий бота.\n\nДля удаления события вам необходимо знать `access_token` бота, которому принадлежит событие, и `id` события.\n\n## Параметры\n\n### Path параметры\n\n- `id: string` (required) — Идентификатор события\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/webhooks/events/01KAJZ2XDSS2S3DSW9EXJZ0TBV\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required) — Значение поля, которое вызвало ошибку. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"}] \ No newline at end of file +[{"method":"GET","path":"/audit_events","summary":"Журнал аудита событий","scope":"audit_events:read","plan":"corporation","auth":true,"paginated":true,"command":"pachca security list","docLink":"https://dev.pachca.com/api/security/list","describe":"# GET /audit_events — Журнал аудита событий\n\n> **Скоуп:** `audit_events:read`\n\n> **Тариф:** Корпорация\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `start_time` — query: Начальная метка времени (включительно)\n- `end_time` — query: Конечная метка времени (включительно)\n- `event_key` — query: Фильтр по конкретному типу события\n- `actor_id` — query: Идентификатор пользователя, выполнившего действие\n- `actor_type` — query: Тип актора\n- `entity_id` — query: Идентификатор затронутой сущности\n- `entity_type` — query: Тип сущности\n- `limit` — query: Количество записей для возврата\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca security list \\\n --start-time=2025-05-01T09:11:00.000Z \\\n --end-time=2025-05-02T09:11:00.000Z \\\n --event-key=user_login \\\n --actor-id=98765 \\\n --actor-type=User \\\n --entity-id=98765 \\\n --entity-type=User \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/security/list\nПолная справка: `pachca api GET /audit_events --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/audit_events","description":"Журнал аудита событий\n\nМетод для получения логов событий на основе указанных фильтров.","parameters":[{"name":"start_time","in":"query","description":"Начальная метка времени (включительно)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-05-01T09:11:00.000Z"},"example":"2025-05-01T09:11:00.000Z","explode":false},{"name":"end_time","in":"query","description":"Конечная метка времени (включительно)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-05-02T09:11:00.000Z"},"example":"2025-05-02T09:11:00.000Z","explode":false},{"name":"event_key","in":"query","description":"Фильтр по конкретному типу события","required":false,"schema":{"type":"string","description":"Тип аудит-события","enum":["user_login","user_logout","user_2fa_fail","user_2fa_success","user_created","user_deleted","user_role_changed","user_updated","tag_created","tag_deleted","user_added_to_tag","user_removed_from_tag","chat_created","chat_renamed","chat_permission_changed","user_chat_join","user_chat_leave","tag_added_to_chat","tag_removed_from_chat","message_updated","message_deleted","message_created","reaction_created","reaction_deleted","thread_created","access_token_created","access_token_updated","access_token_destroy","kms_encrypt","kms_decrypt","audit_events_accessed","dlp_violation_detected","search_users_api","search_chats_api","search_messages_api","bot_scopes_updated","bot_webhook_settings_updated","bot_token_recreated","bot_deleted","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"user_login":"Пользователь успешно вошел в систему","user_logout":"Пользователь вышел из системы","user_2fa_fail":"Неудачная попытка двухфакторной аутентификации","user_2fa_success":"Успешная двухфакторная аутентификация","user_created":"Создана новая учетная запись пользователя","user_deleted":"Учетная запись пользователя удалена","user_role_changed":"Роль пользователя была изменена","user_updated":"Данные пользователя обновлены","tag_created":"Создан новый тег","tag_deleted":"Тег удален","user_added_to_tag":"Пользователь добавлен в тег","user_removed_from_tag":"Пользователь удален из тега","chat_created":"Создан новый чат","chat_renamed":"Чат переименован","chat_permission_changed":"Изменены права доступа к чату","user_chat_join":"Пользователь присоединился к чату","user_chat_leave":"Пользователь покинул чат","tag_added_to_chat":"Тег добавлен в чат","tag_removed_from_chat":"Тег удален из чата","message_updated":"Сообщение отредактировано","message_deleted":"Сообщение удалено","message_created":"Сообщение создано","reaction_created":"Реакция добавлена","reaction_deleted":"Реакция удалена","thread_created":"Тред создан","access_token_created":"Создан новый токен доступа","access_token_updated":"Токен доступа обновлен","access_token_destroy":"Токен доступа удален","kms_encrypt":"Данные зашифрованы","kms_decrypt":"Данные расшифрованы","audit_events_accessed":"Доступ к журналам аудита получен","dlp_violation_detected":"Срабатывание правила DLP-системы","search_users_api":"Поиск сотрудников через API","search_chats_api":"Поиск чатов через API","search_messages_api":"Поиск сообщений через API","bot_scopes_updated":"Изменены скоупы токена бота","bot_webhook_settings_updated":"Изменены настройки исходящего вебхука бота","bot_token_recreated":"Токен бота перевыпущен (ротация)","bot_deleted":"Бот удалён","video_call_started":"Видеозвонок начат","video_call_finished":"Видеозвонок завершён","video_call_recording_ready":"Запись видеозвонка готова"},"example":"user_login","$ref":"#/components/schemas/AuditEventKey"},"example":"user_login","explode":false},{"name":"actor_id","in":"query","description":"Идентификатор пользователя, выполнившего действие","required":false,"schema":{"type":"string","example":"98765"},"example":"98765","explode":false},{"name":"actor_type","in":"query","description":"Тип актора","required":false,"schema":{"type":"string","example":"User"},"example":"User","explode":false},{"name":"entity_id","in":"query","description":"Идентификатор затронутой сущности","required":false,"schema":{"type":"string","example":"98765"},"example":"98765","explode":false},{"name":"entity_type","in":"query","description":"Тип сущности","required":false,"schema":{"type":"string","example":"User"},"example":"User","explode":false},{"name":"limit","in":"query","description":"Количество записей для возврата","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Событие аудита","required":["id","created_at","event_key","entity_id","entity_type","actor_id","actor_type","details","ip_address","user_agent"],"properties":{"id":{"type":"string","description":"Уникальный идентификатор события","example":"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14"},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"event_key":{"description":"Ключ типа события","example":"user_login","allOf":[{"type":"string","description":"Тип аудит-события","enum":["user_login","user_logout","user_2fa_fail","user_2fa_success","user_created","user_deleted","user_role_changed","user_updated","tag_created","tag_deleted","user_added_to_tag","user_removed_from_tag","chat_created","chat_renamed","chat_permission_changed","user_chat_join","user_chat_leave","tag_added_to_chat","tag_removed_from_chat","message_updated","message_deleted","message_created","reaction_created","reaction_deleted","thread_created","access_token_created","access_token_updated","access_token_destroy","kms_encrypt","kms_decrypt","audit_events_accessed","dlp_violation_detected","search_users_api","search_chats_api","search_messages_api","bot_scopes_updated","bot_webhook_settings_updated","bot_token_recreated","bot_deleted","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"user_login":"Пользователь успешно вошел в систему","user_logout":"Пользователь вышел из системы","user_2fa_fail":"Неудачная попытка двухфакторной аутентификации","user_2fa_success":"Успешная двухфакторная аутентификация","user_created":"Создана новая учетная запись пользователя","user_deleted":"Учетная запись пользователя удалена","user_role_changed":"Роль пользователя была изменена","user_updated":"Данные пользователя обновлены","tag_created":"Создан новый тег","tag_deleted":"Тег удален","user_added_to_tag":"Пользователь добавлен в тег","user_removed_from_tag":"Пользователь удален из тега","chat_created":"Создан новый чат","chat_renamed":"Чат переименован","chat_permission_changed":"Изменены права доступа к чату","user_chat_join":"Пользователь присоединился к чату","user_chat_leave":"Пользователь покинул чат","tag_added_to_chat":"Тег добавлен в чат","tag_removed_from_chat":"Тег удален из чата","message_updated":"Сообщение отредактировано","message_deleted":"Сообщение удалено","message_created":"Сообщение создано","reaction_created":"Реакция добавлена","reaction_deleted":"Реакция удалена","thread_created":"Тред создан","access_token_created":"Создан новый токен доступа","access_token_updated":"Токен доступа обновлен","access_token_destroy":"Токен доступа удален","kms_encrypt":"Данные зашифрованы","kms_decrypt":"Данные расшифрованы","audit_events_accessed":"Доступ к журналам аудита получен","dlp_violation_detected":"Срабатывание правила DLP-системы","search_users_api":"Поиск сотрудников через API","search_chats_api":"Поиск чатов через API","search_messages_api":"Поиск сообщений через API","bot_scopes_updated":"Изменены скоупы токена бота","bot_webhook_settings_updated":"Изменены настройки исходящего вебхука бота","bot_token_recreated":"Токен бота перевыпущен (ротация)","bot_deleted":"Бот удалён","video_call_started":"Видеозвонок начат","video_call_finished":"Видеозвонок завершён","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/AuditEventKey"}]},"entity_id":{"type":"string","description":"Идентификатор затронутой сущности","example":"98765"},"entity_type":{"type":"string","description":"Тип затронутой сущности","example":"User"},"actor_id":{"type":"string","description":"Идентификатор пользователя, выполнившего действие","example":"98765"},"actor_type":{"type":"string","description":"Тип актора","example":"User"},"details":{"description":"Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект.","allOf":[{"description":"Дополнительные детали события аудита. Структура зависит от значения event_key.","anyOf":[{"type":"object","description":"Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted.","$ref":"#/components/schemas/AuditDetailsEmpty"},{"type":"object","description":"При: user_updated","required":["changed_attrs"],"properties":{"changed_attrs":{"type":"array","description":"Список изменённых полей","items":{"type":"string"}}},"$ref":"#/components/schemas/AuditDetailsUserUpdated"},{"type":"object","description":"При: user_role_changed","required":["new_company_role","previous_company_role","initiator_id"],"properties":{"new_company_role":{"type":"string","description":"Новая роль"},"previous_company_role":{"type":"string","description":"Предыдущая роль"},"initiator_id":{"type":"integer","format":"int32","description":"Идентификатор инициатора"}},"$ref":"#/components/schemas/AuditDetailsRoleChanged"},{"type":"object","description":"При: tag_created, tag_deleted","required":["name"],"properties":{"name":{"type":"string","description":"Название тега"}},"$ref":"#/components/schemas/AuditDetailsTagName"},{"type":"object","description":"При: user_added_to_tag, user_removed_from_tag, user_chat_leave","required":["initiator_id"],"properties":{"initiator_id":{"type":"integer","format":"int32","description":"Идентификатор инициатора действия"}},"$ref":"#/components/schemas/AuditDetailsInitiator"},{"type":"object","description":"При: user_chat_join","required":["inviter_id"],"properties":{"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор пригласившего"}},"$ref":"#/components/schemas/AuditDetailsInviter"},{"type":"object","description":"При: chat_renamed","required":["old_name","new_name"],"properties":{"old_name":{"type":"string","description":"Прежнее название чата"},"new_name":{"type":"string","description":"Новое название чата"}},"$ref":"#/components/schemas/AuditDetailsChatRenamed"},{"type":"object","description":"При: chat_permission_changed","required":["public_access"],"properties":{"public_access":{"type":"boolean","description":"Публичный доступ"}},"$ref":"#/components/schemas/AuditDetailsChatPermission"},{"type":"object","description":"При: tag_added_to_chat","required":["chat_id","tag_name"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"},"tag_name":{"type":"string","description":"Название тега"}},"$ref":"#/components/schemas/AuditDetailsTagChat"},{"type":"object","description":"При: tag_removed_from_chat","required":["chat_id"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"}},"$ref":"#/components/schemas/AuditDetailsChatId"},{"type":"object","description":"При: access_token_created, access_token_updated, access_token_destroy","required":["scopes"],"properties":{"scopes":{"type":"array","description":"Скоупы токена","items":{"type":"string"}}},"$ref":"#/components/schemas/AuditDetailsTokenScopes"},{"type":"object","description":"При: kms_encrypt, kms_decrypt","required":["chat_id","message_id","reason"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения"},"reason":{"type":"string","description":"Причина операции"}},"$ref":"#/components/schemas/AuditDetailsKms"},{"type":"object","description":"При: dlp_violation_detected","required":["dlp_rule_id","dlp_rule_name","message_id","chat_id","user_id","action_message","conditions_matched"],"properties":{"dlp_rule_id":{"type":"integer","format":"int32","description":"Идентификатор правила DLP"},"dlp_rule_name":{"type":"string","description":"Название правила DLP"},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения"},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя"},"action_message":{"type":"string","description":"Описание действия. `null`, если у действия правила текст не задан.","nullable":true},"conditions_matched":{"type":"boolean","description":"Результат проверки условий правила (true — условия сработали)"}},"$ref":"#/components/schemas/AuditDetailsDlp"},{"type":"object","description":"При: search_users_api, search_chats_api, search_messages_api","required":["search_type","query_present","cursor_present","limit","filters"],"properties":{"search_type":{"type":"string","description":"Тип поиска"},"query_present":{"type":"boolean","description":"Указан ли поисковый запрос"},"cursor_present":{"type":"boolean","description":"Использован ли курсор"},"limit":{"type":"integer","format":"int32","description":"Количество возвращённых результатов"},"filters":{"type":"object","description":"Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages).","additionalProperties":{}}},"$ref":"#/components/schemas/AuditDetailsSearch"},{"type":"object","description":"При: bot_scopes_updated","required":["added_scopes","removed_scopes"],"properties":{"added_scopes":{"type":"array","description":"Скоупы, добавленные токену бота","items":{"type":"string"}},"removed_scopes":{"type":"array","description":"Скоупы, отозванные у токена бота","items":{"type":"string"}}},"$ref":"#/components/schemas/AuditDetailsBotScopes"},{"type":"object","description":"При: bot_webhook_settings_updated","required":["changes"],"properties":{"changes":{"type":"object","description":"Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение).","additionalProperties":{}}},"$ref":"#/components/schemas/AuditDetailsBotWebhookSettings"},{"type":"object","description":"При: video_call_started, video_call_finished","required":["chat_id","duration","max_members_count"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором проходит видеозвонок"},"duration":{"type":"integer","format":"int32","description":"Длительность звонка в секундах на момент события. Для video_call_started равна 0."},"max_members_count":{"type":"integer","format":"int32","description":"Максимальное число одновременных участников за время звонка"}},"$ref":"#/components/schemas/AuditDetailsVideoCall"},{"type":"object","description":"При: video_call_recording_ready","required":["chat_id","duration","size"],"properties":{"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором проходил видеозвонок"},"duration":{"type":"integer","format":"int32","description":"Длительность записи в секундах"},"size":{"type":"integer","format":"int64","description":"Размер файла записи в байтах"}},"$ref":"#/components/schemas/AuditDetailsVideoCallRecording"}],"$ref":"#/components/schemas/AuditEventDetailsUnion"}]},"ip_address":{"type":"string","description":"IP-адрес, с которого было выполнено действие","example":"192.168.1.100"},"user_agent":{"type":"string","description":"User agent клиента","example":"Pachca/3.60.0 (co.staply.pachca; build:15; iOS 18.5.0) Alamofire/5.0.0"}},"$ref":"#/components/schemas/AuditEvent"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"audit_events:read","plan":"corporation","scopeRoles":["owner"]},"paginated":true},"docs":"# Журнал аудита событий\n\n**Метод**: `GET`\n\n**Путь**: `/audit_events`\n\n> **Скоуп:** `audit_events:read`\n\n> **Внимание:** Доступно только на тарифе **Корпорация**\n\nМетод для получения логов событий на основе указанных фильтров.\n\n## Параметры\n\n### Query параметры\n\n- `start_time: date-time` — Начальная метка времени (включительно)\n- `end_time: date-time` — Конечная метка времени (включительно)\n- `event_key: string` — Фильтр по конкретному типу события\n Значения: `user_login`, `user_logout`, `user_2fa_fail`, `user_2fa_success`, `user_created`, `user_deleted`, `user_role_changed`, `user_updated`, `tag_created`, `tag_deleted`, `user_added_to_tag`, `user_removed_from_tag`, `chat_created`, `chat_renamed`, `chat_permission_changed`, `user_chat_join`, `user_chat_leave`, `tag_added_to_chat`, `tag_removed_from_chat`, `message_updated`, `message_deleted`, `message_created`, `reaction_created`, `reaction_deleted`, `thread_created`, `access_token_created`, `access_token_updated`, `access_token_destroy`, `kms_encrypt`, `kms_decrypt`, `audit_events_accessed`, `dlp_violation_detected`, `search_users_api`, `search_chats_api`, `search_messages_api`, `bot_scopes_updated`, `bot_webhook_settings_updated`, `bot_token_recreated`, `bot_deleted`, `video_call_started`, `video_call_finished`, `video_call_recording_ready`\n- `actor_id: string` — Идентификатор пользователя, выполнившего действие\n- `actor_type: string` — Тип актора\n- `entity_id: string` — Идентификатор затронутой сущности\n- `entity_type: string` — Тип сущности\n- `limit: integer, int32` (default: 50) — Количество записей для возврата\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/audit_events?start_time=2025-05-01T09:11:00.000Z&end_time=2025-05-02T09:11:00.000Z&event_key=user_login&actor_id=98765&actor_type=User&entity_id=98765&entity_type=User&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: string` (required) — Уникальный идентификатор события. Пример: `\"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14\"`\n - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `event_key: string` (required) — Ключ типа события\n Значения: `user_login` — Пользователь успешно вошел в систему, `user_logout` — Пользователь вышел из системы, `user_2fa_fail` — Неудачная попытка двухфакторной аутентификации, `user_2fa_success` — Успешная двухфакторная аутентификация, `user_created` — Создана новая учетная запись пользователя, `user_deleted` — Учетная запись пользователя удалена, `user_role_changed` — Роль пользователя была изменена, `user_updated` — Данные пользователя обновлены, `tag_created` — Создан новый тег, `tag_deleted` — Тег удален, `user_added_to_tag` — Пользователь добавлен в тег, `user_removed_from_tag` — Пользователь удален из тега, `chat_created` — Создан новый чат, `chat_renamed` — Чат переименован, `chat_permission_changed` — Изменены права доступа к чату, `user_chat_join` — Пользователь присоединился к чату, `user_chat_leave` — Пользователь покинул чат, `tag_added_to_chat` — Тег добавлен в чат, `tag_removed_from_chat` — Тег удален из чата, `message_updated` — Сообщение отредактировано, `message_deleted` — Сообщение удалено, `message_created` — Сообщение создано, `reaction_created` — Реакция добавлена, `reaction_deleted` — Реакция удалена, `thread_created` — Тред создан, `access_token_created` — Создан новый токен доступа, `access_token_updated` — Токен доступа обновлен, `access_token_destroy` — Токен доступа удален, `kms_encrypt` — Данные зашифрованы, `kms_decrypt` — Данные расшифрованы, `audit_events_accessed` — Доступ к журналам аудита получен, `dlp_violation_detected` — Срабатывание правила DLP-системы, `search_users_api` — Поиск сотрудников через API, `search_chats_api` — Поиск чатов через API, `search_messages_api` — Поиск сообщений через API, `bot_scopes_updated` — Изменены скоупы токена бота, `bot_webhook_settings_updated` — Изменены настройки исходящего вебхука бота, `bot_token_recreated` — Токен бота перевыпущен (ротация), `bot_deleted` — Бот удалён, `video_call_started` — Видеозвонок начат, `video_call_finished` — Видеозвонок завершён, `video_call_recording_ready` — Запись видеозвонка готова\n - `entity_id: string` (required) — Идентификатор затронутой сущности. Пример: `\"98765\"`\n - `entity_type: string` (required) — Тип затронутой сущности. Пример: `\"User\"`\n - `actor_id: string` (required) — Идентификатор пользователя, выполнившего действие. Пример: `\"98765\"`\n - `actor_type: string` (required) — Тип актора. Пример: `\"User\"`\n - `details: anyOf` (required) — Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект.\n **Возможные варианты:**\n\n - **AuditDetailsEmpty**: Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted.\n - **AuditDetailsUserUpdated**: При: user_updated\n - `changed_attrs: array of string` (required) — Список изменённых полей\n - **AuditDetailsRoleChanged**: При: user_role_changed\n - `new_company_role: string` (required) — Новая роль\n - `previous_company_role: string` (required) — Предыдущая роль\n - `initiator_id: integer, int32` (required) — Идентификатор инициатора\n - **AuditDetailsTagName**: При: tag_created, tag_deleted\n - `name: string` (required) — Название тега\n - **AuditDetailsInitiator**: При: user_added_to_tag, user_removed_from_tag, user_chat_leave\n - `initiator_id: integer, int32` (required) — Идентификатор инициатора действия\n - **AuditDetailsInviter**: При: user_chat_join\n - `inviter_id: integer, int32` (required) — Идентификатор пригласившего\n - **AuditDetailsChatRenamed**: При: chat_renamed\n - `old_name: string` (required) — Прежнее название чата\n - `new_name: string` (required) — Новое название чата\n - **AuditDetailsChatPermission**: При: chat_permission_changed\n - `public_access: boolean` (required) — Публичный доступ\n - **AuditDetailsTagChat**: При: tag_added_to_chat\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - `tag_name: string` (required) — Название тега\n - **AuditDetailsChatId**: При: tag_removed_from_chat\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - **AuditDetailsTokenScopes**: При: access_token_created, access_token_updated, access_token_destroy\n - `scopes: array of string` (required) — Скоупы токена\n - **AuditDetailsKms**: При: kms_encrypt, kms_decrypt\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - `message_id: integer, int32` (required) — Идентификатор сообщения\n - `reason: string` (required) — Причина операции\n - **AuditDetailsDlp**: При: dlp_violation_detected\n - `dlp_rule_id: integer, int32` (required) — Идентификатор правила DLP\n - `dlp_rule_name: string` (required) — Название правила DLP\n - `message_id: integer, int32` (required) — Идентификатор сообщения\n - `chat_id: integer, int32` (required) — Идентификатор чата\n - `user_id: integer, int32` (required) — Идентификатор пользователя\n - `action_message: string` (required, nullable) — Описание действия. `null`, если у действия правила текст не задан.\n - `conditions_matched: boolean` (required) — Результат проверки условий правила (true — условия сработали)\n - **AuditDetailsSearch**: При: search_users_api, search_chats_api, search_messages_api\n - `search_type: string` (required) — Тип поиска\n - `query_present: boolean` (required) — Указан ли поисковый запрос\n - `cursor_present: boolean` (required) — Использован ли курсор\n - `limit: integer, int32` (required) — Количество возвращённых результатов\n - `filters: Record` (required) — Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages).\n **Структура значений Record:**\n - Тип значения: `any`\n - **AuditDetailsBotScopes**: При: bot_scopes_updated\n - `added_scopes: array of string` (required) — Скоупы, добавленные токену бота\n - `removed_scopes: array of string` (required) — Скоупы, отозванные у токена бота\n - **AuditDetailsBotWebhookSettings**: При: bot_webhook_settings_updated\n - `changes: Record` (required) — Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение).\n **Структура значений Record:**\n - Тип значения: `any`\n - **AuditDetailsVideoCall**: При: video_call_started, video_call_finished\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором проходит видеозвонок\n - `duration: integer, int32` (required) — Длительность звонка в секундах на момент события. Для video_call_started равна 0.\n - `max_members_count: integer, int32` (required) — Максимальное число одновременных участников за время звонка\n - **AuditDetailsVideoCallRecording**: При: video_call_recording_ready\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором проходил видеозвонок\n - `duration: integer, int32` (required) — Длительность записи в секундах\n - `size: integer, int64` (required) — Размер файла записи в байтах\n - `ip_address: string` (required) — IP-адрес, с которого было выполнено действие. Пример: `\"192.168.1.100\"`\n - `user_agent: string` (required) — User agent клиента. Пример: `\"Pachca/3.60.0 (co.staply.pachca; build:15; iOS 18.5.0) Alamofire/5.0.0\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": \"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14\",\n \"created_at\": \"2025-05-15T14:30:00.000Z\",\n \"event_key\": \"user_login\",\n \"entity_id\": \"98765\",\n \"entity_type\": \"User\",\n \"actor_id\": \"98765\",\n \"actor_type\": \"User\",\n \"details\": null,\n \"ip_address\": \"192.168.1.100\",\n \"user_agent\": \"Pachca/3.60.0 (co.staply.pachca; build:15; iOS 18.5.0) Alamofire/5.0.0\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/bot/recreate_token","summary":"Ротация собственного токена бота","scope":"bot_self:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots recreate-token-self","docLink":"https://dev.pachca.com/api/bots/recreate-token-self","describe":"# POST /bot/recreate_token — Ротация собственного токена бота\n\n> **Скоуп:** `bot_self:write`\n\n## Эквивалентная команда\n\n```bash\npachca bots recreate-token-self \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/recreate-token-self\nПолная справка: `pachca api POST /bot/recreate_token --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/bot/recreate_token","description":"Ротация собственного токена бота\n\nМетод позволяет боту сгенерировать себе новый `access_token` своим же токеном — без участия администратора и без знания собственного `id`. Ротируется токен того бота, которому принадлежит токен запроса.\n\nТокен, которым выполнен запрос, инвалидируется сразу. Новый токен возвращается в ответе один раз — обязательно сохраните его, иначе бот потеряет доступ к API.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры созданного бота","required":["id","webhook","access_token"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]},"access_token":{"type":"string","description":"Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.","example":"bm90X2FfcmVhbF90b2tlbg"}},"$ref":"#/components/schemas/BotCreateResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"},"access_token":"bm90X2FfcmVhbF90b2tlbg"}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bot_self:write","scopeRoles":["bot"]},"paginated":false},"docs":"# Ротация собственного токена бота\n\n**Метод**: `POST`\n\n**Путь**: `/bot/recreate_token`\n\n> **Скоуп:** `bot_self:write`\n\nМетод позволяет боту сгенерировать себе новый `access_token` своим же токеном — без участия администратора и без знания собственного `id`. Ротируется токен того бота, которому принадлежит токен запроса.\n\nТокен, которым выполнен запрос, инвалидируется сразу. Новый токен возвращается в ответе один раз — обязательно сохраните его, иначе бот потеряет доступ к API.\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/bot/recreate_token\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры созданного бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `[\"messages:create\"]`\n - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `\"bm90X2FfcmVhbF90b2tlbg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n },\n \"access_token\": \"bm90X2FfcmVhbF90b2tlbg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/bot/webhook","summary":"Саморегистрация вебхука бота","scope":"bot_self:webhook:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots update-webhook","docLink":"https://dev.pachca.com/api/bots/update-webhook","describe":"# PUT /bot/webhook — Саморегистрация вебхука бота\n\n> **Скоуп:** `bot_self:webhook:write`\n\n## Тело запроса\n\n- `webhook: object` (required) — Объект параметров вебхука\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук.\n\n## Эквивалентная команда\n\n```bash\npachca bots update-webhook \\\n --outgoing-url=https://www.website.com/tasks/new \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/update-webhook\nПолная справка: `pachca api PUT /bot/webhook --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/bot/webhook","description":"Саморегистрация вебхука бота\n\nМетод позволяет боту самостоятельно изменить `URL` своего исходящего вебхука своим же токеном — без участия администратора и без знания собственного `id`. Меняется вебхук того бота, которому принадлежит токен. Чтобы отключить вебхук, передайте пустую строку в `outgoing_url`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на саморегистрацию вебхука бота","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Объект параметров вебхука","required":["outgoing_url"],"properties":{"outgoing_url":{"type":"string","description":"URL исходящего вебхука. Пустая строка отключает вебхук.","example":"https://www.website.com/tasks/new"}}}},"$ref":"#/components/schemas/BotWebhookSelfUpdateRequest"},"example":{"webhook":{"outgoing_url":"https://www.website.com/tasks/new"}}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bot_self:webhook:write","scopeRoles":["bot"]},"paginated":false},"docs":"# Саморегистрация вебхука бота\n\n**Метод**: `PUT`\n\n**Путь**: `/bot/webhook`\n\n> **Скоуп:** `bot_self:webhook:write`\n\nМетод позволяет боту самостоятельно изменить `URL` своего исходящего вебхука своим же токеном — без участия администратора и без знания собственного `id`. Меняется вебхук того бота, которому принадлежит токен. Чтобы отключить вебхук, передайте пустую строку в `outgoing_url`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `webhook: object` (required) — Объект параметров вебхука\n - `outgoing_url: string` (required) — URL исходящего вебхука. Пустая строка отключает вебхук. Пример: `\"https://www.website.com/tasks/new\"`\n\n### Пример\n\n```json\n{\n \"webhook\": {\n \"outgoing_url\": \"https://www.website.com/tasks/new\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/bot/webhook\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"webhook\": {\n \"outgoing_url\": \"https://www.website.com/tasks/new\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `[\"messages:create\"]`\n - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/bots","summary":"Список ботов","scope":"bots:read","plan":null,"auth":true,"paginated":true,"command":"pachca bots list","docLink":"https://dev.pachca.com/api/bots/list","describe":"# GET /bots — Список ботов\n\n> **Скоуп:** `bots:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Поисковая фраза для фильтрации ботов по имени\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca bots list \\\n --query=задач \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/list\nПолная справка: `pachca api GET /bots --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/bots","description":"Список ботов\n\nМетод для получения списка ботов. Возвращаются только боты, доступные вам для редактирования: созданные вами и те, чьи настройки открывают вам доступ к редактированию.","parameters":[{"name":"query","in":"query","description":"Поисковая фраза для фильтрации ботов по имени","required":false,"schema":{"type":"string","example":"задач"},"example":"задач","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTczODgxNn0"},"example":"eyJpZCI6MTczODgxNn0","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}},"example":{"data":[{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"}}],"meta":{"paginate":{"next_page":"eyJpZCI6MTczODgxNn0"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"bots:read","scopeRoles":["owner","admin","user"]},"paginated":true},"docs":"# Список ботов\n\n**Метод**: `GET`\n\n**Путь**: `/bots`\n\n> **Скоуп:** `bots:read`\n\nМетод для получения списка ботов. Возвращаются только боты, доступные вам для редактирования: созданные вами и те, чьи настройки открывают вам доступ к редактированию.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Поисковая фраза для фильтрации ботов по имени\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/bots?query=задач&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `[\"messages:create\"]`\n - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJpZCI6MTczODgxNn0\"\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"POST","path":"/bots","summary":"Новый бот","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots create","docLink":"https://dev.pachca.com/api/bots/create","describe":"# POST /bots — Новый бот\n\n> **Скоуп:** `bots:write`\n\n## Тело запроса\n\n- `webhook: object` (required) — Объект параметров вебхука создаваемого бота\n - `name: string` (required, max length: 255) — Имя бота\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.\n - `outgoing_url: string` — URL исходящего вебхука\n - `events: array of string` — События, на которые подписан бот\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.\n - `template: string` — Шаблон форматирования входящего вебхука\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.\n - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.\n\n## Эквивалентная команда\n\n```bash\npachca bots create \\\n --name='Бот задач' \\\n --nickname=tasks_bot \\\n --outgoing-url=https://www.website.com/tasks/new \\\n --events='[\"message_new\"]' \\\n --commands='[\"/task\",\"/help\"]' \\\n --scopes='[\"messages:create\"]' \\\n --template='Заказ от {{ client }} на сумму {{ amount }} ₽' \\\n --challenge-key=challenge \\\n --can-edit='[\"admin\"]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/create\nПолная справка: `pachca api POST /bots --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/bots","description":"Новый бот\n\nМетод для создания бота и получения его `access_token`.\n\nПри создании вы получите `access_token` бота — сразу сохраните его. Повторно получить токен вы сможете только через интерфейс (вкладка «API» настроек бота).","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание бота","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Объект параметров вебхука создаваемого бота","required":["name"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота. Должен заканчиваться на `_bot`.","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new"},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","default":"commands","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","example":["/task","/help"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука","example":"Заказ от {{ client }} на сумму {{ amount }} ₽"},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","default":"liquid","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука","example":"challenge"},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","default":true,"example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","default":false,"example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","default":false,"example":false},"who_can_add":{"description":"Кто может добавлять бота в чаты","default":"creator","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется.","default":false,"example":false}}}},"$ref":"#/components/schemas/BotCreateRequest"},"example":{"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"]}}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры созданного бота","required":["id","webhook","access_token"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]},"access_token":{"type":"string","description":"Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.","example":"bm90X2FfcmVhbF90b2tlbg"}},"$ref":"#/components/schemas/BotCreateResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"},"access_token":"bm90X2FfcmVhbF90b2tlbg"}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Новый бот\n\n**Метод**: `POST`\n\n**Путь**: `/bots`\n\n> **Скоуп:** `bots:write`\n\nМетод для создания бота и получения его `access_token`.\n\nПри создании вы получите `access_token` бота — сразу сохраните его. Повторно получить токен вы сможете только через интерфейс (вкладка «API» настроек бота).\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `webhook: object` (required) — Объект параметров вебхука создаваемого бота\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов. Пример: `[\"/task\",\"/help\"]`\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя. Пример: `[\"messages:create\"]`\n - `template: string` — Шаблон форматирования входящего вебхука. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `single_chat: boolean` (default: false) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Задаётся только при создании, при редактировании не меняется. Пример: `false`\n\n### Пример\n\n```json\n{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/bots\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры созданного бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `[\"messages:create\"]`\n - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `\"bm90X2FfcmVhbF90b2tlbg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n },\n \"access_token\": \"bm90X2FfcmVhbF90b2tlbg\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/bots/{id}","summary":"Информация о боте","scope":"bots:read","plan":null,"auth":true,"paginated":false,"command":"pachca bots get","docLink":"https://dev.pachca.com/api/bots/get","describe":"# GET /bots/{id} — Информация о боте\n\n> **Скоуп:** `bots:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Эквивалентная команда\n\n```bash\npachca bots get 1738816 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/get\nПолная справка: `pachca api GET /bots/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/bots/{id}","description":"Информация о боте\n\nМетод для получения параметров бота по его `id`.","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:read","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Информация о боте\n\n**Метод**: `GET`\n\n**Путь**: `/bots/{id}`\n\n> **Скоуп:** `bots:read`\n\nМетод для получения параметров бота по его `id`.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/bots/1738816\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `[\"messages:create\"]`\n - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/bots/{id}","summary":"Редактирование бота","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots update","docLink":"https://dev.pachca.com/api/bots/update","describe":"# PUT /bots/{id} — Редактирование бота\n\n> **Скоуп:** `bots:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Тело запроса\n\n- `webhook: object` (required) — Объект параметров вебхука редактируемого бота\n - `name: string` (max length: 255) — Имя бота\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`.\n - `outgoing_url: string` — URL исходящего вебхука\n - `events: array of string` — События, на которые подписан бот\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.\n - `template: string` — Шаблон форматирования входящего вебхука\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.\n\n## Эквивалентная команда\n\n```bash\npachca bots update 1738816 \\\n --name='Бот задач' \\\n --nickname=tasks_bot \\\n --outgoing-url=https://www.website.com/tasks/new \\\n --events='[\"message_new\"]' \\\n --commands='[\"/task\",\"/help\"]' \\\n --scopes='[\"messages:create\"]' \\\n --template='Заказ от {{ client }} на сумму {{ amount }} ₽' \\\n --challenge-key=challenge \\\n --can-edit='[\"admin\"]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/update\nПолная справка: `pachca api PUT /bots/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/bots/{id}","description":"Редактирование бота\n\nМетод для редактирования бота.\n\nДля редактирования бота вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры бота указываются в теле запроса.\n\nВы не можете редактировать бота, настройки которого вам недоступны (поле «Кто может редактировать настройки бота» находится во вкладке «Основное» в настройках бота).","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на обновление бота","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Объект параметров вебхука редактируемого бота","properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота. Должен заканчиваться на `_bot`.","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука","example":"https://www.website.com/tasks/new"},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","default":"commands","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов.","example":["/task","/help"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука","example":"Заказ от {{ client }} на сумму {{ amount }} ₽"},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","default":"liquid","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука","example":"challenge"},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","default":true,"example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","default":false,"example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","default":false,"example":false},"who_can_add":{"description":"Кто может добавлять бота в чаты","default":"creator","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}}}}},"$ref":"#/components/schemas/BotUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры бота","required":["id","webhook"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]}},"$ref":"#/components/schemas/BotResponse"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Редактирование бота\n\n**Метод**: `PUT`\n\n**Путь**: `/bots/{id}`\n\n> **Скоуп:** `bots:write`\n\nМетод для редактирования бота.\n\nДля редактирования бота вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры бота указываются в теле запроса.\n\nВы не можете редактировать бота, настройки которого вам недоступны (поле «Кто может редактировать настройки бота» находится во вкладке «Основное» в настройках бота).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `webhook: object` (required) — Объект параметров вебхука редактируемого бота\n - `name: string` (max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (max length: 255) — Никнейм бота. Должен заканчиваться на `_bot`. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` — URL исходящего вебхука. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` — Команды бота (триггер-слова), на которые он реагирует при trigger_on = commands. Суммарная длина команд, объединённых через запятую, не должна превышать 255 символов. Пример: `[\"/task\",\"/help\"]`\n - `scopes: array of string` — Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя. Пример: `[\"messages:create\"]`\n - `template: string` — Шаблон форматирования входящего вебхука. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` — Название поля проверки для верификации входящего вебхука. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (default: true) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (default: false) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (default: false) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `who_can_add: string` — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `can_edit: array of string` — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n\n### Пример\n\n```json\n{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"commands\": [\n \"/task\",\n \"/help\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"challenge_key\": \"challenge\",\n \"can_edit\": [\n \"admin\"\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/bots/1738816\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"commands\": [\n \"/task\",\n \"/help\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"challenge_key\": \"challenge\",\n \"can_edit\": [\n \"admin\"\n ]\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `[\"messages:create\"]`\n - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/bots/{id}","summary":"Удаление бота","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots delete","docLink":"https://dev.pachca.com/api/bots/delete","describe":"# DELETE /bots/{id} — Удаление бота\n\n> **Скоуп:** `bots:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Эквивалентная команда\n\n```bash\npachca bots delete 1738816 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/delete\nПолная справка: `pachca api DELETE /bots/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/bots/{id}","description":"Удаление бота\n\nМетод для удаления бота. Прежний `access_token` бота сразу инвалидируется, бот исключается из всех чатов, его исходящий вебхук удаляется.\n\nУдаление доступно создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Владельцы и администраторы чатов удалять бота не могут, даже если им разрешено его редактировать.\n\nДля удаления бота вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Удаление бота\n\n**Метод**: `DELETE`\n\n**Путь**: `/bots/{id}`\n\n> **Скоуп:** `bots:write`\n\nМетод для удаления бота. Прежний `access_token` бота сразу инвалидируется, бот исключается из всех чатов, его исходящий вебхук удаляется.\n\nУдаление доступно создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Владельцы и администраторы чатов удалять бота не могут, даже если им разрешено его редактировать.\n\nДля удаления бота вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/bots/1738816\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/bots/{id}/recreate_token","summary":"Ротация токена бота","scope":"bots:write","plan":null,"auth":true,"paginated":false,"command":"pachca bots recreate-token","docLink":"https://dev.pachca.com/api/bots/recreate-token","describe":"# POST /bots/{id}/recreate_token — Ротация токена бота\n\n> **Скоуп:** `bots:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор бота\n\n## Эквивалентная команда\n\n```bash\npachca bots recreate-token 1738816 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/recreate-token\nПолная справка: `pachca api POST /bots/{id}/recreate_token --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/bots/{id}/recreate_token","description":"Ротация токена бота\n\nМетод генерирует боту новый `access_token` и сразу инвалидирует прежний. Используйте его при компрометации токена или плановой ротации секрета в `CI`.\n\nРотация доступна создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Укажите `id` бота в `URL` запроса. Новый токен возвращается в ответе только один раз — сохраните его сразу.","parameters":[{"name":"id","in":"path","description":"Идентификатор бота","required":true,"schema":{"type":"integer","format":"int32","example":1738816},"example":1738816}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Параметры созданного бота","required":["id","webhook","access_token"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор бота (совпадает с `user_id` бота)","example":1738816},"webhook":{"description":"Объект параметров вебхука","allOf":[{"type":"object","description":"Параметры вебхука бота","required":["name","nickname","outgoing_url","events","trigger_on","commands","scopes","template","template_engine","challenge_key","link_preview_enabled","ignore_self_messages","events_history_enabled","single_chat","can_edit","who_can_add"],"properties":{"name":{"type":"string","description":"Имя бота","example":"Бот задач","maxLength":255},"nickname":{"type":"string","description":"Никнейм бота","example":"tasks_bot","maxLength":255},"outgoing_url":{"type":"string","description":"URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.","example":"https://www.website.com/tasks/new","nullable":true},"events":{"type":"array","description":"События, на которые подписан бот","example":["message_new"],"items":{"type":"string","description":"Событие исходящего вебхука бота","enum":["message_new","message_update","message_delete","reaction_new","reaction_delete","button_click","message_link_shared","chat_member_add","chat_member_remove","company_member_invite","company_member_confirm","company_member_suspend","company_member_activate","company_member_delete","company_member_update","video_call_started","video_call_finished","video_call_recording_ready"],"x-enum-descriptions":{"message_new":"Новое сообщение","message_update":"Сообщение отредактировано","message_delete":"Сообщение удалено","reaction_new":"Добавлена реакция","reaction_delete":"Реакция удалена","button_click":"Нажата кнопка","message_link_shared":"В сообщении отправлена ссылка (для unfurl)","chat_member_add":"Участник добавлен в чат","chat_member_remove":"Участник удалён из чата","company_member_invite":"Сотрудник приглашён в компанию","company_member_confirm":"Сотрудник подтвердил приглашение","company_member_suspend":"Сотрудник деактивирован","company_member_activate":"Сотрудник активирован","company_member_delete":"Сотрудник удалён из компании","company_member_update":"Данные сотрудника изменены","video_call_started":"Видеозвонок начался","video_call_finished":"Видеозвонок завершился","video_call_recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/BotEventName"}},"trigger_on":{"description":"Условие срабатывания исходящего вебхука","example":"commands","allOf":[{"type":"string","description":"Условие срабатывания исходящего вебхука бота","enum":["commands","all_messages","unfurl"],"x-enum-descriptions":{"commands":"Только на команды (триггер-слова) из commands","all_messages":"На все сообщения в чатах, где есть бот","unfurl":"На развёртывание ссылок (link previews)"},"$ref":"#/components/schemas/BotTriggerOn"}]},"commands":{"type":"array","description":"Команды бота (триггер-слова)","example":["/task"],"items":{"type":"string"}},"scopes":{"type":"array","description":"Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.","example":["messages:create"],"items":{"type":"string"}},"template":{"type":"string","description":"Шаблон форматирования входящего вебхука. `null`, если не задан.","example":"Заказ от {{ client }} на сумму {{ amount }} ₽","nullable":true},"template_engine":{"description":"Шаблонизатор для обработки шаблона входящего вебхука","example":"liquid","allOf":[{"type":"string","description":"Шаблонизатор для форматирования входящих вебхуков","enum":["liquid","mustache"],"x-enum-descriptions":{"liquid":"Liquid — условия, циклы и фильтры","mustache":"Mustache — простая подстановка без логики"},"$ref":"#/components/schemas/BotTemplateEngine"}]},"challenge_key":{"type":"string","description":"Название поля проверки для верификации входящего вебхука. `null`, если не задано.","example":"challenge","nullable":true},"link_preview_enabled":{"type":"boolean","description":"Показывать превью ссылок в сообщениях входящего вебхука","example":true},"ignore_self_messages":{"type":"boolean","description":"Игнорировать входящие сообщения, отправленные самим ботом","example":false},"events_history_enabled":{"type":"boolean","description":"Сохранять историю событий бота для последующего получения через метод истории событий","example":false},"single_chat":{"type":"boolean","description":"Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят.","example":false},"can_edit":{"type":"array","description":"Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель.","example":["admin"],"items":{"type":"string","description":"Роль, которой разрешено редактировать настройки бота","enum":["admin","chat_owners"],"x-enum-descriptions":{"admin":"Администраторы компании","chat_owners":"Владельцы чатов, в которые добавлен бот"},"$ref":"#/components/schemas/BotCanEdit"}},"who_can_add":{"description":"Кто может добавлять бота в чаты","example":"creator","allOf":[{"type":"string","description":"Кто может добавлять бота в чаты","enum":["creator","creator_admin","creator_admin_user","anyone"],"x-enum-descriptions":{"creator":"Только создатель бота","creator_admin":"Создатель и администраторы компании","creator_admin_user":"Создатель, администраторы и участники компании","anyone":"Любой пользователь, в том числе гости"},"$ref":"#/components/schemas/BotWhoCanAdd"}]}},"$ref":"#/components/schemas/BotWebhook"}]},"access_token":{"type":"string","description":"Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота.","example":"bm90X2FfcmVhbF90b2tlbg"}},"$ref":"#/components/schemas/BotCreateResponse"}}},"example":{"data":{"id":1738816,"webhook":{"name":"Бот задач","nickname":"tasks_bot","outgoing_url":"https://www.website.com/tasks/new","events":["message_new"],"trigger_on":"commands","commands":["/task"],"scopes":["messages:create"],"template":"Заказ от {{ client }} на сумму {{ amount }} ₽","template_engine":"liquid","challenge_key":"challenge","link_preview_enabled":true,"ignore_self_messages":false,"events_history_enabled":false,"single_chat":false,"can_edit":["admin"],"who_can_add":"creator"},"access_token":"bm90X2FfcmVhbF90b2tlbg"}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"bots:write","scopeRoles":["owner","admin","user"]},"paginated":false},"docs":"# Ротация токена бота\n\n**Метод**: `POST`\n\n**Путь**: `/bots/{id}/recreate_token`\n\n> **Скоуп:** `bots:write`\n\nМетод генерирует боту новый `access_token` и сразу инвалидирует прежний. Используйте его при компрометации токена или плановой ротации секрета в `CI`.\n\nРотация доступна создателю бота, а также администратору компании, если настройки бота открывают администраторам доступ к редактированию. Укажите `id` бота в `URL` запроса. Новый токен возвращается в ответе только один раз — сохраните его сразу.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор бота\n\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/bots/1738816/recreate_token\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Параметры созданного бота\n - `id: integer, int32` (required) — Идентификатор бота (совпадает с `user_id` бота). Пример: `1738816`\n - `webhook: object` (required) — Объект параметров вебхука\n - `name: string` (required, max length: 255) — Имя бота. Пример: `\"Бот задач\"`\n - `nickname: string` (required, max length: 255) — Никнейм бота. Пример: `\"tasks_bot\"`\n - `outgoing_url: string` (required, nullable) — URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. Пример: `\"https://www.website.com/tasks/new\"`\n - `events: array of string` (required) — События, на которые подписан бот. Пример: `[\"message_new\"]`\n - `trigger_on: string` (required) — Условие срабатывания исходящего вебхука\n Значения: `commands` — Только на команды (триггер-слова) из commands, `all_messages` — На все сообщения в чатах, где есть бот, `unfurl` — На развёртывание ссылок (link previews)\n - `commands: array of string` (required) — Команды бота (триггер-слова). Пример: `[\"/task\"]`\n - `scopes: array of string` (required) — Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. Пример: `[\"messages:create\"]`\n - `template: string` (required, nullable) — Шаблон форматирования входящего вебхука. `null`, если не задан. Пример: `\"Заказ от {{ client }} на сумму {{ amount }} ₽\"`\n - `template_engine: string` (required) — Шаблонизатор для обработки шаблона входящего вебхука\n Значения: `liquid` — Liquid — условия, циклы и фильтры, `mustache` — Mustache — простая подстановка без логики\n - `challenge_key: string` (required, nullable) — Название поля проверки для верификации входящего вебхука. `null`, если не задано. Пример: `\"challenge\"`\n - `link_preview_enabled: boolean` (required) — Показывать превью ссылок в сообщениях входящего вебхука. Пример: `true`\n - `ignore_self_messages: boolean` (required) — Игнорировать входящие сообщения, отправленные самим ботом. Пример: `false`\n - `events_history_enabled: boolean` (required) — Сохранять историю событий бота для последующего получения через метод истории событий. Пример: `false`\n - `single_chat: boolean` (required) — Ограничивает бота одной беседой или каналом: `true` — бота можно добавить только в один такой чат, `false` — в несколько. Личные чаты и треды в ограничение не входят. Пример: `false`\n - `can_edit: array of string` (required) — Роли, которым, помимо создателя, разрешено редактировать настройки бота. Создатель может редактировать всегда. Пустой массив — редактировать может только создатель. Пример: `[\"admin\"]`\n - `who_can_add: string` (required) — Кто может добавлять бота в чаты\n Значения: `creator` — Только создатель бота, `creator_admin` — Создатель и администраторы компании, `creator_admin_user` — Создатель, администраторы и участники компании, `anyone` — Любой пользователь, в том числе гости\n - `access_token: string` (required) — Токен доступа бота. Возвращается при создании бота и при ротации токена. Текущий токен также можно посмотреть и скопировать в интерфейсе — вкладка «API» настроек бота. Пример: `\"bm90X2FfcmVhbF90b2tlbg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 1738816,\n \"webhook\": {\n \"name\": \"Бот задач\",\n \"nickname\": \"tasks_bot\",\n \"outgoing_url\": \"https://www.website.com/tasks/new\",\n \"events\": [\n \"message_new\"\n ],\n \"trigger_on\": \"commands\",\n \"commands\": [\n \"/task\"\n ],\n \"scopes\": [\n \"messages:create\"\n ],\n \"template\": \"Заказ от {{ client }} на сумму {{ amount }} ₽\",\n \"template_engine\": \"liquid\",\n \"challenge_key\": \"challenge\",\n \"link_preview_enabled\": true,\n \"ignore_self_messages\": false,\n \"events_history_enabled\": false,\n \"single_chat\": false,\n \"can_edit\": [\n \"admin\"\n ],\n \"who_can_add\": \"creator\"\n },\n \"access_token\": \"bm90X2FfcmVhbF90b2tlbg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats","summary":"Новый чат","scope":"chats:create","plan":null,"auth":true,"paginated":false,"command":"pachca chats create","docLink":"https://dev.pachca.com/api/chats/create","describe":"# POST /chats — Новый чат\n\n> **Скоуп:** `chats:create`\n\n## Тело запроса\n\n- `chat: object` (required) — Собранный объект параметров создаваемого чата\n - `name: string` (required, max length: 255) — Название\n - `member_ids: array of integer` — Массив идентификаторов пользователей, которые станут участниками\n - `group_tag_ids: array of integer` — Массив идентификаторов тегов, которые станут участниками\n - `channel: boolean` (default: false) — Является каналом\n - `public: boolean` (default: false) — Открытый доступ\n\n## Эквивалентная команда\n\n```bash\npachca chats create \\\n --name='🤿 aqua' \\\n --member-ids='[186,187]' \\\n --group-tag-ids='[86,18]' \\\n --channel \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/create\nПолная справка: `pachca api POST /chats --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats","description":"Новый чат\n\nМетод для создания нового чата.\n\nДля создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](POST /messages).\n\nПри создании чата вы автоматически становитесь участником.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание чата","required":["chat"],"properties":{"chat":{"type":"object","description":"Собранный объект параметров создаваемого чата","required":["name"],"properties":{"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, которые станут участниками","example":[186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, которые станут участниками","example":[86,18],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","default":false,"example":true},"public":{"type":"boolean","description":"Открытый доступ","default":false,"example":false}}}},"$ref":"#/components/schemas/ChatCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый чат\n\n**Метод**: `POST`\n\n**Путь**: `/chats`\n\n> **Скоуп:** `chats:create`\n\nМетод для создания нового чата.\n\nДля создания личной переписки 1 на 1 с пользователем пользуйтесь методом [Новое сообщение](POST /messages).\n\nПри создании чата вы автоматически становитесь участником.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `chat: object` (required) — Собранный объект параметров создаваемого чата\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `member_ids: array of integer` — Массив идентификаторов пользователей, которые станут участниками. Пример: `[186,187]`\n - `group_tag_ids: array of integer` — Массив идентификаторов тегов, которые станут участниками. Пример: `[86,18]`\n - `channel: boolean` (default: false) — Является каналом. Пример: `true`\n - `public: boolean` (default: false) — Открытый доступ. Пример: `false`\n\n### Пример\n\n```json\n{\n \"chat\": {\n \"name\": \"🤿 aqua\",\n \"member_ids\": [\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 86,\n 18\n ],\n \"channel\": true\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"chat\": {\n \"name\": \"🤿 aqua\",\n \"member_ids\": [\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 86,\n 18\n ],\n \"channel\": true\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Чат\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats","summary":"Список чатов","scope":"chats:read","plan":null,"auth":true,"paginated":true,"command":"pachca chats list","docLink":"https://dev.pachca.com/api/chats/list","describe":"# GET /chats — Список чатов\n\n> **Скоуп:** `chats:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `sort` — query: Поле сортировки\n- `order` — query: Направление сортировки\n- `availability` — query: Параметр, который отвечает за доступность и выборку чатов для пользователя\n- `last_message_at_after` — query: Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before` — query: Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `personal` — query: Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca chats list \\\n --sort=id \\\n --order=desc \\\n --availability=is_member \\\n --last-message-at-after=2025-01-01T00:00:00.000Z \\\n --last-message-at-before=2025-02-01T00:00:00.000Z \\\n --no-personal \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/list\nПолная справка: `pachca api GET /chats --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats","description":"Список чатов\n\nМетод для получения списка чатов по заданным параметрам.","parameters":[{"name":"sort","in":"query","description":"Поле сортировки","required":false,"schema":{"default":"id","allOf":[{"type":"string","description":"Поле сортировки чатов","enum":["id","last_message_at"],"x-enum-descriptions":{"id":"По идентификатору чата","last_message_at":"По дате и времени создания последнего сообщения"},"$ref":"#/components/schemas/ChatSortField"}]},"example":"id","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"default":"desc","allOf":[{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"$ref":"#/components/schemas/SortOrder"}]},"example":"desc","explode":false},{"name":"availability","in":"query","description":"Параметр, который отвечает за доступность и выборку чатов для пользователя","required":false,"schema":{"default":"is_member","allOf":[{"type":"string","description":"Доступность чатов для пользователя","enum":["is_member","public"],"x-enum-descriptions":{"is_member":"Чаты, где пользователь является участником","public":"Все открытые чаты компании, вне зависимости от участия в них пользователя"},"$ref":"#/components/schemas/ChatAvailability"}]},"example":"is_member","explode":false},{"name":"last_message_at_after","in":"query","description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"last_message_at_before","in":"query","description":"Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"personal","in":"query","description":"Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.","required":false,"schema":{"type":"boolean","example":false},"example":false,"explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список чатов\n\n**Метод**: `GET`\n\n**Путь**: `/chats`\n\n> **Скоуп:** `chats:read`\n\nМетод для получения списка чатов по заданным параметрам.\n\n## Параметры\n\n### Query параметры\n\n- `sort: string` (default: id) — Поле сортировки\n- `order: string` (default: desc) — Направление сортировки\n- `availability: string` (default: is_member) — Параметр, который отвечает за доступность и выборку чатов для пользователя\n- `last_message_at_after: date-time` — Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before: date-time` — Фильтрация по времени создания последнего сообщения. Будут возвращены те чаты, время последнего созданного сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `personal: boolean` — Фильтрация по личным и групповым чатам. Если параметр не указан, возвращаются любые чаты.\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/chats?sort=id&order=desc&availability=is_member&last_message_at_after=2025-01-01T00:00:00.000Z&last_message_at_before=2025-02-01T00:00:00.000Z&personal=false&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats/exports","summary":"Экспорт сообщений","scope":"chat_exports:write","plan":"corporation","auth":true,"paginated":false,"command":"pachca chats request-export","docLink":"https://dev.pachca.com/api/chats/request-export","describe":"# POST /chats/exports — Экспорт сообщений\n\n> **Скоуп:** `chat_exports:write`\n\n> **Тариф:** Корпорация\n\n## Тело запроса\n\n- `start_at: date` (required) — Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD\n- `end_at: date` (required) — Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD\n- `webhook_url: string` (required) — Адрес, на который будет отправлен вебхук по завершению экспорта\n- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.\n- `skip_chats_file: boolean` (default: false) — Пропуск формирования файла со списком чатов (chats.json)\n\n## Эквивалентная команда\n\n```bash\npachca chats request-export \\\n --start-at=2025-03-20 \\\n --end-at=2025-03-20 \\\n --webhook-url=https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2 \\\n --chat-ids='[1381521]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/request-export\nПолная справка: `pachca api POST /chats/exports --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats/exports","description":"Экспорт сообщений\n\nМетод для запрашивания экспорта сообщений за указанный период.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на экспорт сообщений","required":["start_at","end_at","webhook_url"],"properties":{"start_at":{"type":"string","format":"date","description":"Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","example":"2025-03-20"},"end_at":{"type":"string","format":"date","description":"Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD","example":"2025-03-20"},"webhook_url":{"type":"string","description":"Адрес, на который будет отправлен вебхук по завершению экспорта","example":"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2"},"chat_ids":{"type":"array","description":"Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов.","example":[1381521],"items":{"type":"integer","format":"int32"}},"skip_chats_file":{"type":"boolean","description":"Пропуск формирования файла со списком чатов (chats.json)","default":false,"example":false}},"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_exports:write","plan":"corporation","scopeRoles":["owner"]},"paginated":false},"docs":"# Экспорт сообщений\n\n**Метод**: `POST`\n\n**Путь**: `/chats/exports`\n\n> **Скоуп:** `chat_exports:write`\n\n> **Внимание:** Доступно только на тарифе **Корпорация**\n\nМетод для запрашивания экспорта сообщений за указанный период.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `start_at: date` (required) — Дата начала для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `\"2025-03-20\"`\n- `end_at: date` (required) — Дата окончания для экспорта (ISO-8601, UTC+0) в формате YYYY-MM-DD. Пример: `\"2025-03-20\"`\n- `webhook_url: string` (required) — Адрес, на который будет отправлен вебхук по завершению экспорта. Пример: `\"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2\"`\n- `chat_ids: array of integer` — Массив идентификаторов чатов. Указывается, если нужно получить сообщения только некоторых чатов. Пример: `[1381521]`\n- `skip_chats_file: boolean` (default: false) — Пропуск формирования файла со списком чатов (chats.json). Пример: `false`\n\n### Пример\n\n```json\n{\n \"start_at\": \"2025-03-20\",\n \"end_at\": \"2025-03-20\",\n \"webhook_url\": \"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2\",\n \"chat_ids\": [\n 1381521\n ]\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/exports\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"start_at\": \"2025-03-20\",\n \"end_at\": \"2025-03-20\",\n \"webhook_url\": \"https://webhook.site/9227d3b8-6e82-4e64-bf5d-ad972ad270f2\",\n \"chat_ids\": [\n 1381521\n ]\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats/exports/{id}","summary":"Скачать архив экспорта","scope":"chat_exports:read","plan":"corporation","auth":true,"paginated":false,"command":"pachca chats download-export","docLink":"https://dev.pachca.com/api/chats/download-export","describe":"# GET /chats/exports/{id} — Скачать архив экспорта\n\n> **Скоуп:** `chat_exports:read`\n\n> **Тариф:** Корпорация\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор экспорта\n\n## Эквивалентная команда\n\n```bash\npachca chats download-export 22322 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/download-export\nПолная справка: `pachca api GET /chats/exports/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats/exports/{id}","description":"Скачать архив экспорта\n\nМетод для скачивания готового архива экспорта сообщений.\n\nДля получения архива вам необходимо знать его `id` и указать его в `URL` запроса.\n\nВ ответ на запрос сервер вернёт `302 Found` с заголовком `Location`, содержащим временную ссылку на скачивание файла. Большинство HTTP-клиентов автоматически следуют редиректу и скачивают файл.","parameters":[{"name":"id","in":"path","description":"Идентификатор экспорта","required":true,"schema":{"type":"integer","format":"int32","example":22322},"example":22322}],"responses":{"302":{"description":"Redirection","headers":{"location":{"schema":{"type":"string","format":"uri"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"},{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}]}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_exports:read","plan":"corporation","scopeRoles":["owner"]},"paginated":false},"docs":"# Скачать архив экспорта\n\n**Метод**: `GET`\n\n**Путь**: `/chats/exports/{id}`\n\n> **Скоуп:** `chat_exports:read`\n\n> **Внимание:** Доступно только на тарифе **Корпорация**\n\nМетод для скачивания готового архива экспорта сообщений.\n\nДля получения архива вам необходимо знать его `id` и указать его в `URL` запроса.\n\nВ ответ на запрос сервер вернёт `302 Found` с заголовком `Location`, содержащим временную ссылку на скачивание файла. Большинство HTTP-клиентов автоматически следуют редиректу и скачивают файл.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор экспорта\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/exports/22322\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 302: Redirection\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n- **Вариант 2**\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats/{id}","summary":"Информация о чате","scope":"chats:read","plan":null,"auth":true,"paginated":false,"command":"pachca chats get","docLink":"https://dev.pachca.com/api/chats/get","describe":"# GET /chats/{id} — Информация о чате\n\n> **Скоуп:** `chats:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca chats get 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/get\nПолная справка: `pachca api GET /chats/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats/{id}","description":"Информация о чате\n\nМетод для получения информации о чате.\n\nДля получения чата вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о чате\n\n**Метод**: `GET`\n\n**Путь**: `/chats/{id}`\n\n> **Скоуп:** `chats:read`\n\nМетод для получения информации о чате.\n\nДля получения чата вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/334\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Чат\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}","summary":"Редактирование чата","scope":"chats:update","plan":null,"auth":true,"paginated":false,"command":"pachca chats update","docLink":"https://dev.pachca.com/api/chats/update","describe":"# PUT /chats/{id} — Редактирование чата\n\n> **Скоуп:** `chats:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Тело запроса\n\n- `chat: object` (required) — Собранный объект параметров обновляемого чата\n - `name: string` (max length: 255) — Название\n - `public: boolean` — Открытый доступ\n\n## Эквивалентная команда\n\n```bash\npachca chats update 334 \\\n --name=Бассейн \\\n --public \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/update\nПолная справка: `pachca api PUT /chats/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}","description":"Редактирование чата\n\nМетод для обновления параметров чата.\n\nДля обновления нужно знать `id` чата и указать его в `URL`. Все обновляемые поля передаются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на обновление чата","required":["chat"],"properties":{"chat":{"type":"object","description":"Собранный объект параметров обновляемого чата","properties":{"name":{"type":"string","description":"Название","example":"Бассейн","maxLength":255},"public":{"type":"boolean","description":"Открытый доступ","example":true}}}},"$ref":"#/components/schemas/ChatUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:update","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование чата\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}`\n\n> **Скоуп:** `chats:update`\n\nМетод для обновления параметров чата.\n\nДля обновления нужно знать `id` чата и указать его в `URL`. Все обновляемые поля передаются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `chat: object` (required) — Собранный объект параметров обновляемого чата\n - `name: string` (max length: 255) — Название. Пример: `\"Бассейн\"`\n - `public: boolean` — Открытый доступ. Пример: `true`\n\n### Пример\n\n```json\n{\n \"chat\": {\n \"name\": \"Бассейн\",\n \"public\": true\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"chat\": {\n \"name\": \"Бассейн\",\n \"public\": true\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Чат\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}/archive","summary":"Архивация чата","scope":"chats:archive","plan":null,"auth":true,"paginated":false,"command":"pachca chats archive","docLink":"https://dev.pachca.com/api/chats/archive","describe":"# PUT /chats/{id}/archive — Архивация чата\n\n> **Скоуп:** `chats:archive`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca chats archive 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/archive\nПолная справка: `pachca api PUT /chats/{id}/archive --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}/archive","description":"Архивация чата\n\nМетод для отправки чата в архив.\n\nДля отправки чата в архив вам необходимо знать `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:archive","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Архивация чата\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}/archive`\n\n> **Скоуп:** `chats:archive`\n\nМетод для отправки чата в архив.\n\nДля отправки чата в архив вам необходимо знать `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334/archive\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats/{id}/group_tags","summary":"Добавление тегов","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members add-group-tags","docLink":"https://dev.pachca.com/api/members/add-group-tags","describe":"# POST /chats/{id}/group_tags — Добавление тегов\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Тело запроса\n\n- `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, которые станут участниками\n\n## Эквивалентная команда\n\n```bash\npachca members add-group-tags 334 \\\n --group-tag-ids='[86,18]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/add-group-tags\nПолная справка: `pachca api POST /chats/{id}/group_tags --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats/{id}/group_tags","description":"Добавление тегов\n\nМетод для добавления тегов в состав участников беседы или канала.\n\nПосле добавления тега все его участники автоматически становятся участниками чата. Состав участников тега и чата синхронизируется автоматически: при добавлении нового участника в тег он сразу появляется в чате, при удалении из тега — удаляется из чата.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на добавление тегов в чат","required":["group_tag_ids"],"properties":{"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, которые станут участниками","example":[86,18],"items":{"type":"integer","format":"int32"}}},"$ref":"#/components/schemas/AddTagsRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Добавление тегов\n\n**Метод**: `POST`\n\n**Путь**: `/chats/{id}/group_tags`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для добавления тегов в состав участников беседы или канала.\n\nПосле добавления тега все его участники автоматически становятся участниками чата. Состав участников тега и чата синхронизируется автоматически: при добавлении нового участника в тег он сразу появляется в чате, при удалении из тега — удаляется из чата.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, которые станут участниками. Пример: `[86,18]`\n\n### Пример\n\n```json\n{\n \"group_tag_ids\": [\n 86,\n 18\n ]\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/334/group_tags\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"group_tag_ids\": [\n 86,\n 18\n ]\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/chats/{id}/group_tags/{tag_id}","summary":"Исключение тега","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members remove-group-tag","docLink":"https://dev.pachca.com/api/members/remove-group-tag","describe":"# DELETE /chats/{id}/group_tags/{tag_id} — Исключение тега\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `tag_id` — путь (обязательный): Идентификатор тега\n\n## Эквивалентная команда\n\n```bash\npachca members remove-group-tag 334 86 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/remove-group-tag\nПолная справка: `pachca api DELETE /chats/{id}/group_tags/{tag_id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/chats/{id}/group_tags/{tag_id}","description":"Исключение тега\n\nМетод для исключения тега из состава участников беседы или канала.\n\nДля исключения тега вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"tag_id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":86},"example":86}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Исключение тега\n\n**Метод**: `DELETE`\n\n**Путь**: `/chats/{id}/group_tags/{tag_id}`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для исключения тега из состава участников беседы или канала.\n\nДля исключения тега вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n- `tag_id: integer, int32` (required) — Идентификатор тега\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/chats/334/group_tags/86\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/chats/{id}/leave","summary":"Выход из беседы или канала","scope":"chats:leave","plan":null,"auth":true,"paginated":false,"command":"pachca members leave","docLink":"https://dev.pachca.com/api/members/leave","describe":"# DELETE /chats/{id}/leave — Выход из беседы или канала\n\n> **Скоуп:** `chats:leave`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca members leave 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/leave\nПолная справка: `pachca api DELETE /chats/{id}/leave --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/chats/{id}/leave","description":"Выход из беседы или канала\n\nМетод для самостоятельного выхода из беседы или канала.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:leave","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Выход из беседы или канала\n\n**Метод**: `DELETE`\n\n**Путь**: `/chats/{id}/leave`\n\n> **Скоуп:** `chats:leave`\n\nМетод для самостоятельного выхода из беседы или канала.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/chats/334/leave\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/chats/{id}/members","summary":"Список участников чата","scope":"chat_members:read","plan":null,"auth":true,"paginated":true,"command":"pachca members list","docLink":"https://dev.pachca.com/api/members/list","describe":"# GET /chats/{id}/members — Список участников чата\n\n> **Скоуп:** `chat_members:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `role` — query: Роль в чате\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca members list 334 \\\n --role=all \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/list\nПолная справка: `pachca api GET /chats/{id}/members --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/chats/{id}/members","description":"Список участников чата\n\nМетод для получения актуального списка участников чата.\n\nВладелец пространства может получить состав участников любого чата пространства. Администраторы и боты могут получить список участников только тех чатов, в которых состоят (или которые являются открытыми).","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"role","in":"query","description":"Роль в чате","required":false,"schema":{"default":"all","allOf":[{"type":"string","description":"Роль участника чата (с фильтром все)","enum":["all","owner","admin","editor","member"],"x-enum-descriptions":{"all":"Любая роль","owner":"Создатель","admin":"Админ","editor":"Редактор","member":"Участник/подписчик"},"$ref":"#/components/schemas/ChatMemberRoleFilter"}]},"example":"all","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список участников чата\n\n**Метод**: `GET`\n\n**Путь**: `/chats/{id}/members`\n\n> **Скоуп:** `chat_members:read`\n\nМетод для получения актуального списка участников чата.\n\nВладелец пространства может получить состав участников любого чата пространства. Администраторы и боты могут получить список участников только тех чатов, в которых состоят (или которые являются открытыми).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n### Query параметры\n\n- `role: string` (default: all) — Роль в чате\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/chats/334/members?role=all&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/chats/{id}/members","summary":"Добавление пользователей","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members add","docLink":"https://dev.pachca.com/api/members/add","describe":"# POST /chats/{id}/members — Добавление пользователей\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата (беседа, канал или чат треда)\n\n## Тело запроса\n\n- `member_ids: array of integer` (required) — Массив идентификаторов пользователей, которые станут участниками\n- `silent: boolean` — Не создавать в чате системное сообщение о добавлении участника\n\n## Эквивалентная команда\n\n```bash\npachca members add 334 \\\n --member-ids='[186,187]' \\\n --silent \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/add\nПолная справка: `pachca api POST /chats/{id}/members --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/chats/{id}/members","description":"Добавление пользователей\n\nМетод для добавления пользователей в состав участников беседы, канала или треда.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата (беседа, канал или чат треда)","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на добавление участников в чат","required":["member_ids"],"properties":{"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, которые станут участниками","example":[186,187],"items":{"type":"integer","format":"int32"}},"silent":{"type":"boolean","description":"Не создавать в чате системное сообщение о добавлении участника","example":true}},"$ref":"#/components/schemas/AddMembersRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Добавление пользователей\n\n**Метод**: `POST`\n\n**Путь**: `/chats/{id}/members`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для добавления пользователей в состав участников беседы, канала или треда.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата (беседа, канал или чат треда)\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `member_ids: array of integer` (required) — Массив идентификаторов пользователей, которые станут участниками. Пример: `[186,187]`\n- `silent: boolean` — Не создавать в чате системное сообщение о добавлении участника. Пример: `true`\n\n### Пример\n\n```json\n{\n \"member_ids\": [\n 186,\n 187\n ],\n \"silent\": true\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/chats/334/members\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"member_ids\": [\n 186,\n 187\n ],\n \"silent\": true\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/chats/{id}/members/{user_id}","summary":"Исключение пользователя","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members remove","docLink":"https://dev.pachca.com/api/members/remove","describe":"# DELETE /chats/{id}/members/{user_id} — Исключение пользователя\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca members remove 334 186 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/remove\nПолная справка: `pachca api DELETE /chats/{id}/members/{user_id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/chats/{id}/members/{user_id}","description":"Исключение пользователя\n\nМетод для исключения пользователя из состава участников беседы или канала.\n\nЕсли пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](DELETE /chats/{id}/leave).","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":186},"example":186}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Исключение пользователя\n\n**Метод**: `DELETE`\n\n**Путь**: `/chats/{id}/members/{user_id}`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для исключения пользователя из состава участников беседы или канала.\n\nЕсли пользователь является владельцем чата, то исключить его нельзя. Он может только самостоятельно выйти из чата, воспользовавшись методом [Выход из беседы или канала](DELETE /chats/{id}/leave).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/chats/334/members/186\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}/members/{user_id}","summary":"Редактирование роли","scope":"chat_members:write","plan":null,"auth":true,"paginated":false,"command":"pachca members update","docLink":"https://dev.pachca.com/api/members/update","describe":"# PUT /chats/{id}/members/{user_id} — Редактирование роли\n\n> **Скоуп:** `chat_members:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `role: string` (required) — Роль\n Значения: `admin` — Админ, `editor` — Редактор (доступно только для каналов), `member` — Участник или подписчик\n\n## Эквивалентная команда\n\n```bash\npachca members update 334 186 \\\n --role=admin \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/members/update\nПолная справка: `pachca api PUT /chats/{id}/members/{user_id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}/members/{user_id}","description":"Редактирование роли\n\nМетод для редактирования роли пользователя или бота в беседе или канале.\n\nДля редактирования роли в беседе или канале вам необходимо знать `id` чата и пользователя (или бота) и указать их в `URL` запроса. Все редактируемые параметры роли указываются в теле запроса.\n\nВладельцу чата роль изменить нельзя. Он всегда имеет права Админа в чате.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334},{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":186},"example":186}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на изменение роли участника","required":["role"],"properties":{"role":{"description":"Роль","example":"admin","allOf":[{"type":"string","description":"Роль участника чата","enum":["admin","editor","member"],"x-enum-descriptions":{"admin":"Админ","editor":"Редактор (доступно только для каналов)","member":"Участник или подписчик"},"$ref":"#/components/schemas/ChatMemberRole"}]}},"$ref":"#/components/schemas/UpdateMemberRoleRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chat_members:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование роли\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}/members/{user_id}`\n\n> **Скоуп:** `chat_members:write`\n\nМетод для редактирования роли пользователя или бота в беседе или канале.\n\nДля редактирования роли в беседе или канале вам необходимо знать `id` чата и пользователя (или бота) и указать их в `URL` запроса. Все редактируемые параметры роли указываются в теле запроса.\n\nВладельцу чата роль изменить нельзя. Он всегда имеет права Админа в чате.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `role: string` (required) — Роль\n Значения: `admin` — Админ, `editor` — Редактор (доступно только для каналов), `member` — Участник или подписчик\n\n### Пример\n\n```json\n{\n \"role\": \"admin\"\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334/members/186\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"role\": \"admin\"\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/chats/{id}/unarchive","summary":"Разархивация чата","scope":"chats:archive","plan":null,"auth":true,"paginated":false,"command":"pachca chats unarchive","docLink":"https://dev.pachca.com/api/chats/unarchive","describe":"# PUT /chats/{id}/unarchive — Разархивация чата\n\n> **Скоуп:** `chats:archive`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор чата\n\n## Эквивалентная команда\n\n```bash\npachca chats unarchive 334 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/chats/unarchive\nПолная справка: `pachca api PUT /chats/{id}/unarchive --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/chats/{id}/unarchive","description":"Разархивация чата\n\nМетод для возвращения чата из архива.\n\nДля разархивации чата вам необходимо знать её `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор чата","required":true,"schema":{"type":"integer","format":"int32","example":334},"example":334}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"chats:archive","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Разархивация чата\n\n**Метод**: `PUT`\n\n**Путь**: `/chats/{id}/unarchive`\n\n> **Скоуп:** `chats:archive`\n\nМетод для возвращения чата из архива.\n\nДля разархивации чата вам необходимо знать её `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор чата\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/chats/334/unarchive\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/custom_properties","summary":"Список дополнительных полей","scope":"custom_properties:read","plan":null,"auth":true,"paginated":false,"command":"pachca custom-properties list","docLink":"https://dev.pachca.com/api/custom-properties/list","describe":"# GET /custom_properties — Список дополнительных полей\n\n> **Скоуп:** `custom_properties:read`\n\n## Параметры\n\n- `entity_type` — query (обязательный): Тип сущности\n\n## Эквивалентная команда\n\n```bash\npachca custom-properties list \\\n --entity-type=User \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/custom-properties/list\nПолная справка: `pachca api GET /custom_properties --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/custom_properties","description":"Список дополнительных полей\n\nНа данный момент работа с дополнительными полями типа \"Файл\" недоступна.\n\nМетод для получения актуального списка дополнительных полей участников и напоминаний в вашей компании.\n\nПо умолчанию в вашей компании все сущности имеют только базовые поля. Но администратор вашей компании может добавлять дополнительные поля, редактировать их и удалять. Если при создании сотрудников (или напоминаний) вы используете дополнительные поля, которые не являются актуальными (удалены или не существуют) - вы получите ошибку.","parameters":[{"name":"entity_type","in":"query","description":"Тип сущности","required":true,"schema":{"type":"string","description":"Тип сущности для поиска","enum":["User","Task"],"x-enum-descriptions":{"User":"Пользователь","Task":"Задача"},"example":"User","$ref":"#/components/schemas/SearchEntityType"},"example":"User","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]}},"$ref":"#/components/schemas/CustomPropertyDefinition"}}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"custom_properties:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Список дополнительных полей\n\n**Метод**: `GET`\n\n**Путь**: `/custom_properties`\n\n> **Скоуп:** `custom_properties:read`\n\nНа данный момент работа с дополнительными полями типа \"Файл\" недоступна.\n\nМетод для получения актуального списка дополнительных полей участников и напоминаний в вашей компании.\n\nПо умолчанию в вашей компании все сущности имеют только базовые поля. Но администратор вашей компании может добавлять дополнительные поля, редактировать их и удалять. Если при создании сотрудников (или напоминаний) вы используете дополнительные поля, которые не являются актуальными (удалены или не существуют) - вы получите ошибку.\n\n## Параметры\n\n### Query параметры\n\n- `entity_type: string` (required) — Тип сущности\n Значения: `User`, `Task`\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/custom_properties?entity_type=User\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\"\n }\n ]\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/direct_url","summary":"Загрузка файла","scope":null,"plan":null,"auth":false,"paginated":false,"command":"pachca files direct-url","docLink":"https://dev.pachca.com/api/files/direct-url","describe":"# POST /direct_url — Загрузка файла\n\n> Авторизация не требуется\n\n## Тело запроса\n\n- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `file: binary` (required) — Файл для загрузки\n\n## Эквивалентная команда\n\n```bash\n# URL получается из ответа POST /uploads (поле direct_url)\npachca files direct-url \\\n --direct-url=$DIRECT_URL \\\n --content-disposition=your_api_token_here \\\n --acl=your_api_token_here \\\n --policy=your_api_token_here \\\n --x-amz-credential=your_api_token_here \\\n --x-amz-algorithm=your_api_token_here \\\n --x-amz-date=your_api_token_here \\\n --x-amz-signature=your_api_token_here \\\n --key=your_api_token_here \\\n --file=./file.jpg \\\n --json\n```\n\nДокументация: https://dev.pachca.com/api/files/direct-url\nПолная справка: `pachca api POST /direct_url --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/direct_url","description":"Загрузка файла\n\nЗагрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](POST /uploads).","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["Content-Disposition","acl","policy","x-amz-credential","x-amz-algorithm","x-amz-date","x-amz-signature","key","file"],"properties":{"Content-Disposition":{"type":"string","description":"Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"acl":{"type":"string","description":"Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"policy":{"type":"string","description":"Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-credential":{"type":"string","description":"Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-algorithm":{"type":"string","description":"Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-date":{"type":"string","description":"Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"x-amz-signature":{"type":"string","description":"Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"key":{"type":"string","description":"Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)"},"file":{"type":"string","format":"binary","description":"Файл для загрузки"}},"$ref":"#/components/schemas/FileUploadRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "}},"requirements":{"auth":false},"paginated":false},"docs":"# Загрузка файла\n\n**Метод**: `POST`\n\n**Путь**: `/direct_url`\n\n> Авторизация не требуется\n\nЗагрузка файла на сервер с форматом `multipart/form-data`. Параметры для загрузки получаются через метод [Получение подписи, ключа и других параметров](POST /uploads).\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `multipart/form-data`\n\n### Схема\n\n- `Content-Disposition: string` (required) — Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `acl: string` (required) — Параметр acl, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `policy: string` (required) — Параметр policy, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-credential: string` (required) — Параметр x-amz-credential, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-algorithm: string` (required) — Параметр x-amz-algorithm, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-date: string` (required) — Параметр x-amz-date, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `x-amz-signature: string` (required) — Параметр x-amz-signature, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `key: string` (required) — Параметр key, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)\n- `file: binary` (required) — Файл для загрузки\n\n\n## Пример запроса\n\n```bash\n# URL получается из ответа POST /uploads (поле direct_url)\ncurl \"$DIRECT_URL\" \\\n -F 'Content-Disposition=attachment' \\\n -F 'acl=private' \\\n -F 'policy=eyJloNBpcmF0aW9u...' \\\n -F 'x-amz-credential=286471_server/20211122/kz-6x/s3/aws4_request' \\\n -F 'x-amz-algorithm=AWS4-HMAC-SHA256' \\\n -F 'x-amz-date=20211122T065734Z' \\\n -F 'x-amz-signature=87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475' \\\n -F 'key=attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}' \\\n -F 'file=@filename.png'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n"},{"method":"POST","path":"/group_tags","summary":"Новый тег","scope":"group_tags:write","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags create","docLink":"https://dev.pachca.com/api/group-tags/create","describe":"# POST /group_tags — Новый тег\n\n> **Скоуп:** `group_tags:write`\n\n## Тело запроса\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags create \\\n --name='Новое название тега' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/create\nПолная справка: `pachca api POST /group_tags --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/group_tags","description":"Новый тег\n\nМетод для создания нового тега.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание или редактирование тега","required":["group_tag"],"properties":{"group_tag":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Название тега","example":"Новое название тега","maxLength":255}}}},"$ref":"#/components/schemas/GroupTagRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Новый тег\n\n**Метод**: `POST`\n\n**Путь**: `/group_tags`\n\n> **Скоуп:** `group_tags:write`\n\nМетод для создания нового тега.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Новое название тега\"`\n\n### Пример\n\n```json\n{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/group_tags\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тег\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/group_tags","summary":"Список тегов сотрудников","scope":"group_tags:read","plan":null,"auth":true,"paginated":true,"command":"pachca group-tags list","docLink":"https://dev.pachca.com/api/group-tags/list","describe":"# GET /group_tags — Список тегов сотрудников\n\n> **Скоуп:** `group_tags:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `names` — query: Массив названий тегов, по которым вы хотите отфильтровать список\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca group-tags list \\\n --names=Design,Product \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/list\nПолная справка: `pachca api GET /group_tags --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/group_tags","description":"Список тегов сотрудников\n\nМетод для получения актуального списка тегов сотрудников. Названия тегов являются уникальными в компании.","parameters":[{"name":"names","in":"query","description":"Массив названий тегов, по которым вы хотите отфильтровать список","required":false,"schema":{"type":"array","description":"Массив названий тегов","example":["Design","Product"],"items":{"type":"string"},"$ref":"#/components/schemas/TagNamesFilter"},"example":["Design","Product"]},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:read","scopeRoles":["owner","admin"]},"paginated":true},"docs":"# Список тегов сотрудников\n\n**Метод**: `GET`\n\n**Путь**: `/group_tags`\n\n> **Скоуп:** `group_tags:read`\n\nМетод для получения актуального списка тегов сотрудников. Названия тегов являются уникальными в компании.\n\n## Параметры\n\n### Query параметры\n\n- `names: array` — Массив названий тегов, по которым вы хотите отфильтровать список\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/group_tags?names[]=Design&names[]=Product&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/group_tags/{id}","summary":"Информация о теге","scope":"group_tags:read","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags get","docLink":"https://dev.pachca.com/api/group-tags/get","describe":"# GET /group_tags/{id} — Информация о теге\n\n> **Скоуп:** `group_tags:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags get 9111 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/get\nПолная справка: `pachca api GET /group_tags/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/group_tags/{id}","description":"Информация о теге\n\nМетод для получения информации о теге. Названия тегов являются уникальными в компании.\n\nДля получения тега вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:read","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Информация о теге\n\n**Метод**: `GET`\n\n**Путь**: `/group_tags/{id}`\n\n> **Скоуп:** `group_tags:read`\n\nМетод для получения информации о теге. Названия тегов являются уникальными в компании.\n\nДля получения тега вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/group_tags/9111\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тег\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/group_tags/{id}","summary":"Редактирование тега","scope":"group_tags:write","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags update","docLink":"https://dev.pachca.com/api/group-tags/update","describe":"# PUT /group_tags/{id} — Редактирование тега\n\n> **Скоуп:** `group_tags:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n\n## Тело запроса\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags update 9111 \\\n --name='Новое название тега' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/update\nПолная справка: `pachca api PUT /group_tags/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/group_tags/{id}","description":"Редактирование тега\n\nМетод для редактирования тега.\n\nДля редактирования тега вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры тега указываются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание или редактирование тега","required":["group_tag"],"properties":{"group_tag":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Название тега","example":"Новое название тега","maxLength":255}}}},"$ref":"#/components/schemas/GroupTagRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тег","required":["id","name","users_count"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор тега","example":9111},"name":{"type":"string","description":"Название тега","example":"Design","maxLength":255},"users_count":{"type":"integer","format":"int32","description":"Количество сотрудников, которые имеют этот тег","example":6}},"$ref":"#/components/schemas/GroupTag"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Редактирование тега\n\n**Метод**: `PUT`\n\n**Путь**: `/group_tags/{id}`\n\n> **Скоуп:** `group_tags:write`\n\nМетод для редактирования тега.\n\nДля редактирования тега вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры тега указываются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `group_tag: object` (required)\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Новое название тега\"`\n\n### Пример\n\n```json\n{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/group_tags/9111\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"group_tag\": {\n \"name\": \"Новое название тега\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тег\n - `id: integer, int32` (required) — Идентификатор тега. Пример: `9111`\n - `name: string` (required, max length: 255) — Название тега. Пример: `\"Design\"`\n - `users_count: integer, int32` (required) — Количество сотрудников, которые имеют этот тег. Пример: `6`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 9111,\n \"name\": \"Design\",\n \"users_count\": 6\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/group_tags/{id}","summary":"Удаление тега","scope":"group_tags:write","plan":null,"auth":true,"paginated":false,"command":"pachca group-tags delete","docLink":"https://dev.pachca.com/api/group-tags/delete","describe":"# DELETE /group_tags/{id} — Удаление тега\n\n> **Скоуп:** `group_tags:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n\n## Эквивалентная команда\n\n```bash\npachca group-tags delete 9111 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/delete\nПолная справка: `pachca api DELETE /group_tags/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/group_tags/{id}","description":"Удаление тега\n\nМетод для удаления тега.\n\nДля удаления тега вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление тега\n\n**Метод**: `DELETE`\n\n**Путь**: `/group_tags/{id}`\n\n> **Скоуп:** `group_tags:write`\n\nМетод для удаления тега.\n\nДля удаления тега вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/group_tags/9111\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/group_tags/{id}/users","summary":"Список сотрудников тега","scope":"group_tags:read","plan":null,"auth":true,"paginated":true,"command":"pachca group-tags list-users","docLink":"https://dev.pachca.com/api/group-tags/list-users","describe":"# GET /group_tags/{id}/users — Список сотрудников тега\n\n> **Скоуп:** `group_tags:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор тега\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca group-tags list-users 9111 \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/group-tags/list-users\nПолная справка: `pachca api GET /group_tags/{id}/users --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/group_tags/{id}/users","description":"Список сотрудников тега\n\nМетод для получения актуального списка сотрудников тега.","parameters":[{"name":"id","in":"path","description":"Идентификатор тега","required":true,"schema":{"type":"integer","format":"int32","example":9111},"example":9111},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"group_tags:read","scopeRoles":["owner","admin"]},"paginated":true},"docs":"# Список сотрудников тега\n\n**Метод**: `GET`\n\n**Путь**: `/group_tags/{id}/users`\n\n> **Скоуп:** `group_tags:read`\n\nМетод для получения актуального списка сотрудников тега.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор тега\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/group_tags/9111/users?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages","summary":"Новое сообщение","scope":"messages:create","plan":null,"auth":true,"paginated":false,"command":"pachca messages create","docLink":"https://dev.pachca.com/api/messages/create","describe":"# POST /messages — Новое сообщение\n\n> **Скоуп:** `messages:create`\n\n## Тело запроса\n\n- `message: object` (required) — Собранный объект параметров создаваемого сообщения\n - `entity_type: string` — Тип сущности\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности\n - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` (required) — Размер файла в байтах, отображаемый пользователю\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image)\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image)\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.\n - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.\n - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.\n- `link_preview: boolean` (default: false) — Отображение предпросмотра первой найденной ссылки в тексте сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages create \\\n --entity-id=334 \\\n --content='Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)' \\\n --files='[{\"key\":\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\"name\":\"logo.png\",\"file_type\":\"image\",\"size\":12345,\"width\":800,\"height\":600,\"duration_ms\":5400,\"waveform\":\"4,8,12,20,16,10,6,3\"}]' \\\n --buttons='[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"},{\"text\":\"Отлично!\",\"data\":\"awesome\"}]]' \\\n --parent-message-id=194270 \\\n --display-avatar-url=https://example.com/avatar.png \\\n --display-name='Бот Поддержки' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/create\nПолная справка: `pachca api POST /messages --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages","description":"Новое сообщение\n\nМетод для отправки сообщения в беседу или канал, личного сообщения пользователю или комментария в тред.\n\nПри использовании `entity_type: \"discussion\"` (или просто без указания `entity_type`) допускается отправка любого `chat_id` в поле `entity_id`. То есть, сообщение можно отправить зная только идентификатор чата. При этом, вы имеете возможность отправить сообщение в тред по его идентификатору или личное сообщение по идентификатору пользователя.\n\nДля отправки личного сообщения пользователю создавать чат не требуется. Достаточно указать `entity_type: \"user\"` и идентификатор пользователя. Чат будет создан автоматически, если между вами ещё не было переписки. Между двумя пользователями может быть только один личный чат.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание сообщения","required":["message"],"properties":{"message":{"type":"object","description":"Собранный объект параметров создаваемого сообщения","required":["entity_id","content"],"properties":{"entity_type":{"description":"Тип сущности","default":"discussion","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности","example":334},"content":{"type":"string","description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"files":{"type":"array","description":"Прикрепляемые файлы","items":{"type":"object","required":["key","name","file_type","size"],"properties":{"key":{"type":"string","description":"Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)","example":"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"},"name":{"type":"string","description":"Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)","example":"logo.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"size":{"type":"integer","format":"int32","description":"Размер файла в байтах, отображаемый пользователю","example":12345},"width":{"type":"integer","format":"int32","description":"Ширина изображения в px (используется в случае, если file_type указан как image)","example":800},"height":{"type":"integer","format":"int32","description":"Высота изображения в px (используется в случае, если file_type указан как image)","example":600},"duration_ms":{"type":"integer","format":"int32","description":"Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":5400,"minimum":1},"waveform":{"type":"string","description":"Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":"4,8,12,20,16,10,6,3","maxLength":256}}}},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке.","example":[[{"text":"Подробнее","url":"https://example.com/details"},{"text":"Отлично!","data":"awesome"}]],"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение.","example":194270},"display_avatar_url":{"type":"string","description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"https://example.com/avatar.png","maxLength":255},"display_name":{"type":"string","description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"Бот Поддержки","maxLength":255},"skip_invite_mentions":{"type":"boolean","description":"Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред.","default":false,"example":false}}},"link_preview":{"type":"boolean","description":"Отображение предпросмотра первой найденной ссылки в тексте сообщения","default":false,"example":false}},"$ref":"#/components/schemas/MessageCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении. `null`, если сообщение не является пересланным.","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля.","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются.","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новое сообщение\n\n**Метод**: `POST`\n\n**Путь**: `/messages`\n\n> **Скоуп:** `messages:create`\n\nМетод для отправки сообщения в беседу или канал, личного сообщения пользователю или комментария в тред.\n\nПри использовании `entity_type: \"discussion\"` (или просто без указания `entity_type`) допускается отправка любого `chat_id` в поле `entity_id`. То есть, сообщение можно отправить зная только идентификатор чата. При этом, вы имеете возможность отправить сообщение в тред по его идентификатору или личное сообщение по идентификатору пользователя.\n\nДля отправки личного сообщения пользователю создавать чат не требуется. Достаточно указать `entity_type: \"user\"` и идентификатор пользователя. Чат будет создан автоматически, если между вами ещё не было переписки. Между двумя пользователями может быть только один личный чат.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `message: object` (required) — Собранный объект параметров создаваемого сообщения\n - `entity_type: string` — Тип сущности\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности. Пример: `334`\n - `content: string` (required) — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\"`\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `\"logo.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` (required) — Размер файла в байтах, отображаемый пользователю. Пример: `12345`\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800`\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600`\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `5400`\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Пример: `[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"},{\"text\":\"Отлично!\",\"data\":\"awesome\"}]]`\n - `parent_message_id: integer, int32` — Идентификатор сообщения. Указывается в случае, если вы отправляете ответ на другое сообщение. Пример: `194270`\n - `display_avatar_url: string` (max length: 255) — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `\"https://example.com/avatar.png\"`\n - `display_name: string` (max length: 255) — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `\"Бот Поддержки\"`\n - `skip_invite_mentions: boolean` (default: false) — Пропуск добавления упоминаемых пользователей в тред. Работает только при отправке сообщения в тред. Пример: `false`\n- `link_preview: boolean` (default: false) — Отображение предпросмотра первой найденной ссылки в тексте сообщения. Пример: `false`\n\n### Пример\n\n```json\n{\n \"message\": {\n \"entity_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n },\n {\n \"text\": \"Отлично!\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"parent_message_id\": 194270,\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"message\": {\n \"entity_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n },\n {\n \"text\": \"Отлично!\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"parent_message_id\": 194270,\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сообщение\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920`\n - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.\n - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным.\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null`\n - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages","summary":"Список сообщений чата","scope":"messages:read","plan":null,"auth":true,"paginated":true,"command":"pachca messages list","docLink":"https://dev.pachca.com/api/messages/list","describe":"# GET /messages — Список сообщений чата\n\n> **Скоуп:** `messages:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `chat_id` — query (обязательный): Идентификатор чата (беседа, канал, диалог или чат треда)\n- `sort` — query: Поле сортировки\n- `order` — query: Направление сортировки\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca messages list \\\n --chat-id=198 \\\n --sort=id \\\n --order=desc \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/list\nПолная справка: `pachca api GET /messages --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages","description":"Список сообщений чата\n\nМетод для получения списка сообщений бесед, каналов, тредов и личных сообщений.\n\nДля получения сообщений вам необходимо знать `chat_id` требуемой беседы, канала, треда или диалога, и указать его в `URL` запроса. Сообщения будут возвращены в порядке убывания даты отправки (то есть, сначала будут идти последние сообщения чата). Для получения более ранних сообщений чата доступны параметры `limit` и `cursor`.","parameters":[{"name":"chat_id","in":"query","description":"Идентификатор чата (беседа, канал, диалог или чат треда)","required":true,"schema":{"type":"integer","format":"int32","example":198},"example":198,"explode":false},{"name":"sort","in":"query","description":"Поле сортировки","required":false,"schema":{"default":"id","allOf":[{"type":"string","description":"Поле сортировки сообщений","enum":["id"],"x-enum-descriptions":{"id":"По идентификатору сообщения"},"$ref":"#/components/schemas/MessageSortField"}]},"example":"id","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"default":"desc","allOf":[{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"$ref":"#/components/schemas/SortOrder"}]},"example":"desc","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении. `null`, если сообщение не является пересланным.","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля.","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются.","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список сообщений чата\n\n**Метод**: `GET`\n\n**Путь**: `/messages`\n\n> **Скоуп:** `messages:read`\n\nМетод для получения списка сообщений бесед, каналов, тредов и личных сообщений.\n\nДля получения сообщений вам необходимо знать `chat_id` требуемой беседы, канала, треда или диалога, и указать его в `URL` запроса. Сообщения будут возвращены в порядке убывания даты отправки (то есть, сначала будут идти последние сообщения чата). Для получения более ранних сообщений чата доступны параметры `limit` и `cursor`.\n\n## Параметры\n\n### Query параметры\n\n- `chat_id: integer, int32` (required) — Идентификатор чата (беседа, канал, диалог или чат треда)\n- `sort: string` (default: id) — Поле сортировки\n- `order: string` (default: desc) — Направление сортировки\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/messages?chat_id=198&sort=id&order=desc&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920`\n - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.\n - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным.\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null`\n - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": null\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages/{id}","summary":"Информация о сообщении","scope":"messages:read","plan":null,"auth":true,"paginated":false,"command":"pachca messages get","docLink":"https://dev.pachca.com/api/messages/get","describe":"# GET /messages/{id} — Информация о сообщении\n\n> **Скоуп:** `messages:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages get 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/get\nПолная справка: `pachca api GET /messages/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages/{id}","description":"Информация о сообщении\n\nМетод для получения информации о сообщении.\n\nДля получения сообщения вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении. `null`, если сообщение не является пересланным.","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля.","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются.","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о сообщении\n\n**Метод**: `GET`\n\n**Путь**: `/messages/{id}`\n\n> **Скоуп:** `messages:read`\n\nМетод для получения информации о сообщении.\n\nДля получения сообщения вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сообщение\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920`\n - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.\n - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным.\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null`\n - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/messages/{id}","summary":"Редактирование сообщения","scope":"messages:update","plan":null,"auth":true,"paginated":false,"command":"pachca messages update","docLink":"https://dev.pachca.com/api/messages/update","describe":"# PUT /messages/{id} — Редактирование сообщения\n\n> **Скоуп:** `messages:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Тело запроса\n\n- `message: object` (required) — Собранный объект параметров редактируемого сообщения\n - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)\n - `file_type: string` — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` — Размер файла в байтах, отображаемый пользователю\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image)\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image)\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.\n - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.\n\n## Эквивалентная команда\n\n```bash\npachca messages update 194275 \\\n --content='Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.' \\\n --files='[{\"key\":\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\"name\":\"logo.png\",\"file_type\":\"image\",\"size\":12345,\"width\":800,\"height\":600,\"duration_ms\":5400,\"waveform\":\"4,8,12,20,16,10,6,3\"}]' \\\n --buttons='[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"}]]' \\\n --display-avatar-url=https://example.com/avatar.png \\\n --display-name='Бот Поддержки' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/update\nПолная справка: `pachca api PUT /messages/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/messages/{id}","description":"Редактирование сообщения\n\nМетод для редактирования сообщения или комментария.\n\nДля редактирования сообщения вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сообщения указываются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на редактирование сообщения","required":["message"],"properties":{"message":{"type":"object","description":"Собранный объект параметров редактируемого сообщения","properties":{"content":{"type":"string","description":"Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`).","example":"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет."},"files":{"type":"array","description":"Прикрепляемые файлы","items":{"type":"object","required":["key","name"],"properties":{"key":{"type":"string","description":"Путь к файлу, полученный в результате [загрузки файла](POST /direct_url)","example":"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png"},"name":{"type":"string","description":"Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением)","example":"logo.png"},"file_type":{"description":"Тип файла","default":"file","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"size":{"type":"integer","format":"int32","description":"Размер файла в байтах, отображаемый пользователю","example":12345},"width":{"type":"integer","format":"int32","description":"Ширина изображения в px (используется в случае, если file_type указан как image)","example":800},"height":{"type":"integer","format":"int32","description":"Высота изображения в px (используется в случае, если file_type указан как image)","example":600},"duration_ms":{"type":"integer","format":"int32","description":"Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":5400,"minimum":1},"waveform":{"type":"string","description":"Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется.","example":"4,8,12,20,16,10,6,3","maxLength":256}}}},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.","example":[[{"text":"Подробнее","url":"https://example.com/details"}]],"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"display_avatar_url":{"type":"string","description":"Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"https://example.com/avatar.png"},"display_name":{"type":"string","description":"Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота.","example":"Бот Поддержки"}}}},"$ref":"#/components/schemas/MessageUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении. `null`, если сообщение не является пересланным.","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля.","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются.","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:update","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование сообщения\n\n**Метод**: `PUT`\n\n**Путь**: `/messages/{id}`\n\n> **Скоуп:** `messages:update`\n\nМетод для редактирования сообщения или комментария.\n\nДля редактирования сообщения вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сообщения указываются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `message: object` (required) — Собранный объект параметров редактируемого сообщения\n - `content: string` — Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). Пример: `\"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\"`\n - `files: array of object` — Прикрепляемые файлы\n - `key: string` (required) — Путь к файлу, полученный в результате [загрузки файла](POST /direct_url). Пример: `\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\"`\n - `name: string` (required) — Название файла, которое вы хотите отображать пользователю (рекомендуется писать вместе с расширением). Пример: `\"logo.png\"`\n - `file_type: string` — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `size: integer, int32` — Размер файла в байтах, отображаемый пользователю. Пример: `12345`\n - `width: integer, int32` — Ширина изображения в px (используется в случае, если file_type указан как image). Пример: `800`\n - `height: integer, int32` — Высота изображения в px (используется в случае, если file_type указан как image). Пример: `600`\n - `duration_ms: integer, int32` (min: 1) — Длительность в миллисекундах. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `5400`\n - `waveform: string` (max length: 256) — Форма волны для визуализации голосового сообщения. Обязательно для голосовых сообщений (`file_type` — `voice`), для других типов не используется. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `buttons: array of array` — Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив. Пример: `[[{\"text\":\"Подробнее\",\"url\":\"https://example.com/details\"}]]`\n - `display_avatar_url: string` — Ссылка на специальную аватарку отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `\"https://example.com/avatar.png\"`\n - `display_name: string` — Полное специальное имя отправителя для этого сообщения. Использование этого поля возможно только с access_token бота. Пример: `\"Бот Поддержки\"`\n\n### Пример\n\n```json\n{\n \"message\": {\n \"content\": \"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n }\n ]\n ],\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/messages/194275\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"message\": {\n \"content\": \"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\",\n \"files\": [\n {\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n \"name\": \"logo.png\",\n \"file_type\": \"image\",\n \"size\": 12345,\n \"width\": 800,\n \"height\": 600,\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\"\n }\n ],\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\"\n }\n ]\n ],\n \"display_avatar_url\": \"https://example.com/avatar.png\",\n \"display_name\": \"Бот Поддержки\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сообщение\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920`\n - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.\n - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным.\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null`\n - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": \"Подробнее\",\n \"url\": \"https://example.com/details\",\n \"data\": \"awesome\"\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/messages/{id}","summary":"Удаление сообщения","scope":"messages:delete","plan":null,"auth":true,"paginated":false,"command":"pachca messages delete","docLink":"https://dev.pachca.com/api/messages/delete","describe":"# DELETE /messages/{id} — Удаление сообщения\n\n> **Скоуп:** `messages:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages delete 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/delete\nПолная справка: `pachca api DELETE /messages/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/messages/{id}","description":"Удаление сообщения\n\nМетод для удаления сообщения.\n\nУдаление сообщения доступно отправителю, админам и редакторам в чате. В личных сообщениях оба пользователя являются редакторами. Ограничений по давности отправки сообщения нет.\n\nДля удаления сообщения вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:delete","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление сообщения\n\n**Метод**: `DELETE`\n\n**Путь**: `/messages/{id}`\n\n> **Скоуп:** `messages:delete`\n\nМетод для удаления сообщения.\n\nУдаление сообщения доступно отправителю, админам и редакторам в чате. В личных сообщениях оба пользователя являются редакторами. Ограничений по давности отправки сообщения нет.\n\nДля удаления сообщения вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/messages/194275\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/link_previews","summary":"Unfurl (разворачивание ссылок)","scope":"link_previews:write","plan":null,"auth":true,"paginated":false,"command":"pachca messages unfurl","docLink":"https://dev.pachca.com/api/messages/unfurl","describe":"# POST /messages/{id}/link_previews — Unfurl (разворачивание ссылок)\n\n> **Скоуп:** `link_previews:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Тело запроса\n\n- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении\n **Структура значений Record:**\n - `title: string` (required) — Заголовок\n - `description: string` (required) — Описание\n - `image_url: string` — Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image)\n - `image: object` — Изображение\n - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](POST /direct_url)\n - `name: string` (required) — Название изображения (рекомендуется писать вместе с расширением)\n - `size: integer, int32` — Размер изображения в байтах\n\n## Эквивалентная команда\n\n```bash\npachca messages unfurl 194275 \\\n --link-previews='{\"https://website.com/articles/123\":{\"title\":\"Статья: Отправка файлов\",\"description\":\"Пример отправки файлов на удаленный сервер\",\"image_url\":\"https://website.com/img/landing.png\",\"image\":{\"key\":\"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\",\"name\":\"files-to-server.jpg\",\"size\":695604}}}' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/unfurl\nПолная справка: `pachca api POST /messages/{id}/link_previews --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/link_previews","description":"Unfurl (разворачивание ссылок)\n\nМетод для создания предпросмотров ссылок в сообщениях. Доступен только для Unfurl-ботов.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на разворачивание ссылок","required":["link_previews"],"properties":{"link_previews":{"type":"object","description":"`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении","x-record-key-example":"https://website.com/articles/123","additionalProperties":{"type":"object","description":"Данные для предпросмотра ссылки","required":["title","description"],"properties":{"title":{"type":"string","description":"Заголовок","example":"Статья: Отправка файлов"},"description":{"type":"string","description":"Описание","example":"Пример отправки файлов на удаленный сервер"},"image_url":{"type":"string","description":"Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image)","example":"https://website.com/img/landing.png"},"image":{"type":"object","description":"Изображение","required":["key","name"],"properties":{"key":{"type":"string","description":"Путь к изображению, полученный в результате [загрузки файла](POST /direct_url)","example":"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}"},"name":{"type":"string","description":"Название изображения (рекомендуется писать вместе с расширением)","example":"files-to-server.jpg"},"size":{"type":"integer","format":"int32","description":"Размер изображения в байтах","example":695604}}}},"$ref":"#/components/schemas/LinkPreview"}}},"$ref":"#/components/schemas/LinkPreviewsRequest"}}}},"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"link_previews:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Unfurl (разворачивание ссылок)\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/link_previews`\n\n> **Скоуп:** `link_previews:write`\n\nМетод для создания предпросмотров ссылок в сообщениях. Доступен только для Unfurl-ботов.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `link_previews: Record` (required) — `JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении\n **Структура значений Record:**\n - `title: string` (required) — Заголовок. Пример: `\"Статья: Отправка файлов\"`\n - `description: string` (required) — Описание. Пример: `\"Пример отправки файлов на удаленный сервер\"`\n - `image_url: string` — Публичная ссылка на изображение (если вы хотите загрузить файл изображения в Пачку, то используйте параметр image). Пример: `\"https://website.com/img/landing.png\"`\n - `image: object` — Изображение\n - `key: string` (required) — Путь к изображению, полученный в результате [загрузки файла](POST /direct_url). Пример: `\"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\"`\n - `name: string` (required) — Название изображения (рекомендуется писать вместе с расширением). Пример: `\"files-to-server.jpg\"`\n - `size: integer, int32` — Размер изображения в байтах. Пример: `695604`\n\n### Пример\n\n```json\n{\n \"link_previews\": {\n \"https://website.com/articles/123\": {\n \"title\": \"Статья: Отправка файлов\",\n \"description\": \"Пример отправки файлов на удаленный сервер\",\n \"image_url\": \"https://website.com/img/landing.png\",\n \"image\": {\n \"key\": \"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\",\n \"name\": \"files-to-server.jpg\",\n \"size\": 695604\n }\n }\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275/link_previews\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"link_previews\": {\n \"https://website.com/articles/123\": {\n \"title\": \"Статья: Отправка файлов\",\n \"description\": \"Пример отправки файлов на удаленный сервер\",\n \"image_url\": \"https://website.com/img/landing.png\",\n \"image\": {\n \"key\": \"attaches/files/93746/e354fd79-9jh6-f2hd-fj83-709dae24c763/${filename}\",\n \"name\": \"files-to-server.jpg\",\n \"size\": 695604\n }\n }\n }\n}'\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/pin","summary":"Закрепление сообщения","scope":"pins:write","plan":null,"auth":true,"paginated":false,"command":"pachca messages pin","docLink":"https://dev.pachca.com/api/messages/pin","describe":"# POST /messages/{id}/pin — Закрепление сообщения\n\n> **Скоуп:** `pins:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages pin 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/pin\nПолная справка: `pachca api POST /messages/{id}/pin --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/pin","description":"Закрепление сообщения\n\nМетод для закрепления сообщения в чате.\n\nДля закрепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error"}},"requirements":{"scope":"pins:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Закрепление сообщения\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/pin`\n\n> **Скоуп:** `pins:write`\n\nМетод для закрепления сообщения в чате.\n\nДля закрепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/messages/194275/pin\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n"},{"method":"DELETE","path":"/messages/{id}/pin","summary":"Открепление сообщения","scope":"pins:write","plan":null,"auth":true,"paginated":false,"command":"pachca messages unpin","docLink":"https://dev.pachca.com/api/messages/unpin","describe":"# DELETE /messages/{id}/pin — Открепление сообщения\n\n> **Скоуп:** `pins:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca messages unpin 194275 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/messages/unpin\nПолная справка: `pachca api DELETE /messages/{id}/pin --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/messages/{id}/pin","description":"Открепление сообщения\n\nМетод для открепления сообщения из чата.\n\nДля открепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"pins:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Открепление сообщения\n\n**Метод**: `DELETE`\n\n**Путь**: `/messages/{id}/pin`\n\n> **Скоуп:** `pins:write`\n\nМетод для открепления сообщения из чата.\n\nДля открепления сообщения вам необходимо знать `id` сообщения и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/messages/194275/pin\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/reactions","summary":"Добавление реакции","scope":"reactions:write","plan":null,"auth":true,"paginated":false,"command":"pachca reactions add","docLink":"https://dev.pachca.com/api/reactions/add","describe":"# POST /messages/{id}/reactions — Добавление реакции\n\n> **Скоуп:** `reactions:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Тело запроса\n\n- `code: string` (required) — Emoji символ реакции\n- `name: string` — Текстовое имя эмодзи (используется для кастомных эмодзи)\n\n## Эквивалентная команда\n\n```bash\npachca reactions add 7231942 \\\n --code=👍 \\\n --name=:+1: \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/reactions/add\nПолная справка: `pachca api POST /messages/{id}/reactions --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/reactions","description":"Добавление реакции\n\nМетод для добавления реакции на сообщение.\n\nДля добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](DELETE /messages/{id}/reactions).\n\n**Лимиты реакций:**\n\n- Каждый пользователь может установить не более **20 уникальных** реакций\n- Сообщение может иметь не более **30 уникальных** реакций\n- Общее количество реакций на сообщение не может превышать **1000**","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":7231942},"example":7231942}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на добавление реакции","required":["code"],"properties":{"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","example":":+1:"}},"$ref":"#/components/schemas/ReactionRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Реакция на сообщение","required":["user_id","created_at","code","name"],"properties":{"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который добавил реакцию","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-01-20T10:30:00.000Z"},"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Название emoji реакции","example":":+1::skin-tone-1:"}},"$ref":"#/components/schemas/Reaction"}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"reactions:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Добавление реакции\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/reactions`\n\n> **Скоуп:** `reactions:write`\n\nМетод для добавления реакции на сообщение.\n\nДля добавления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения отправляются в виде символов `Emoji`. Если пользователь уже ставил реакцию - повторно она установлена не будет. Для удаления реакции надо воспользоваться методом [Удаление реакции](DELETE /messages/{id}/reactions).\n\n**Лимиты реакций:**\n\n- Каждый пользователь может установить не более **20 уникальных** реакций\n- Сообщение может иметь не более **30 уникальных** реакций\n- Общее количество реакций на сообщение не может превышать **1000**\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n- `name: string` — Текстовое имя эмодзи (используется для кастомных эмодзи). Пример: `\":+1:\"`\n\n### Пример\n\n```json\n{\n \"code\": \"👍\",\n \"name\": \":+1:\"\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/messages/7231942/reactions\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"code\": \"👍\",\n \"name\": \":+1:\"\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил реакцию. Пример: `12`\n- `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-01-20T10:30:00.000Z\"`\n- `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n- `name: string` (required) — Название emoji реакции. Пример: `\":+1::skin-tone-1:\"`\n\n**Пример ответа:**\n\n```json\n{\n \"user_id\": 12,\n \"created_at\": \"2024-01-20T10:30:00.000Z\",\n \"code\": \"👍\",\n \"name\": \":+1::skin-tone-1:\"\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/messages/{id}/reactions","summary":"Удаление реакции","scope":"reactions:write","plan":null,"auth":true,"paginated":false,"command":"pachca reactions remove","docLink":"https://dev.pachca.com/api/reactions/remove","describe":"# DELETE /messages/{id}/reactions — Удаление реакции\n\n> **Скоуп:** `reactions:write`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n- `code` — query (обязательный): Emoji символ реакции\n- `name` — query: Текстовое имя эмодзи (используется для кастомных эмодзи)\n\n## Эквивалентная команда\n\n```bash\npachca reactions remove 7231942 \\\n --code=👍 \\\n --name=:+1: \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/reactions/remove\nПолная справка: `pachca api DELETE /messages/{id}/reactions --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/messages/{id}/reactions","description":"Удаление реакции\n\nМетод для удаления реакции на сообщение.\n\nДля удаления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения хранятся в виде символов `Emoji`.\n\nУдалять можно только те реакции, которые были поставлены авторизованным пользователем.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":7231942},"example":7231942},{"name":"code","in":"query","description":"Emoji символ реакции","required":true,"schema":{"type":"string","example":"👍"},"example":"👍","explode":false},{"name":"name","in":"query","description":"Текстовое имя эмодзи (используется для кастомных эмодзи)","required":false,"schema":{"type":"string","example":":+1:"},"example":":+1:","explode":false}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"reactions:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление реакции\n\n**Метод**: `DELETE`\n\n**Путь**: `/messages/{id}/reactions`\n\n> **Скоуп:** `reactions:write`\n\nМетод для удаления реакции на сообщение.\n\nДля удаления реакции вам необходимо знать `id` сообщения и указать его в `URL` запроса. Реакции на сообщения хранятся в виде символов `Emoji`.\n\nУдалять можно только те реакции, которые были поставлены авторизованным пользователем.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n### Query параметры\n\n- `code: string` (required) — Emoji символ реакции\n- `name: string` — Текстовое имя эмодзи (используется для кастомных эмодзи)\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/messages/7231942/reactions?code=👍&name=:+1:\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages/{id}/reactions","summary":"Список реакций","scope":"reactions:read","plan":null,"auth":true,"paginated":true,"command":"pachca reactions list","docLink":"https://dev.pachca.com/api/reactions/list","describe":"# GET /messages/{id}/reactions — Список реакций\n\n> **Скоуп:** `reactions:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca reactions list 194275 \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/reactions/list\nПолная справка: `pachca api GET /messages/{id}/reactions --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages/{id}/reactions","description":"Список реакций\n\nМетод для получения актуального списка реакций на сообщение.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Реакция на сообщение","required":["user_id","created_at","code","name"],"properties":{"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который добавил реакцию","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-01-20T10:30:00.000Z"},"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Название emoji реакции","example":":+1::skin-tone-1:"}},"$ref":"#/components/schemas/Reaction"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"reactions:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список реакций\n\n**Метод**: `GET`\n\n**Путь**: `/messages/{id}/reactions`\n\n> **Скоуп:** `reactions:read`\n\nМетод для получения актуального списка реакций на сообщение.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275/reactions?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил реакцию. Пример: `12`\n - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-01-20T10:30:00.000Z\"`\n - `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n - `name: string` (required) — Название emoji реакции. Пример: `\":+1::skin-tone-1:\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"user_id\": 12,\n \"created_at\": \"2024-01-20T10:30:00.000Z\",\n \"code\": \"👍\",\n \"name\": \":+1::skin-tone-1:\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/messages/{id}/read_member_ids","summary":"Список прочитавших сообщение","scope":"messages:read","plan":null,"auth":true,"paginated":true,"command":"pachca read-member list-readers","docLink":"https://dev.pachca.com/api/read-member/list-readers","describe":"# GET /messages/{id}/read_member_ids — Список прочитавших сообщение\n\n> **Скоуп:** `messages:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca read-member list-readers 194275 \\\n --limit=300 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/read-member/list-readers\nПолная справка: `pachca api GET /messages/{id}/read_member_ids --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/messages/{id}/read_member_ids","description":"Список прочитавших сообщение\n\nМетод для получения актуального списка пользователей, прочитавших сообщение.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":194275},"example":194275},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":300,"example":300,"minimum":1,"maximum":300},"example":300,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"integer","format":"int32"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"messages:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список прочитавших сообщение\n\n**Метод**: `GET`\n\n**Путь**: `/messages/{id}/read_member_ids`\n\n> **Скоуп:** `messages:read`\n\nМетод для получения актуального списка пользователей, прочитавших сообщение.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n### Query параметры\n\n- `limit: integer, int32` (default: 300) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/messages/194275/read_member_ids?limit=300\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of integer` (required)\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n 100\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/messages/{id}/thread","summary":"Новый тред","scope":"threads:create","plan":null,"auth":true,"paginated":false,"command":"pachca threads add","docLink":"https://dev.pachca.com/api/threads/add","describe":"# POST /messages/{id}/thread — Новый тред\n\n> **Скоуп:** `threads:create`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор сообщения\n\n## Эквивалентная команда\n\n```bash\npachca threads add 154332686 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/add\nПолная справка: `pachca api POST /messages/{id}/thread --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/messages/{id}/thread","description":"Новый тред\n\nМетод для создания нового треда к сообщению.\n\nЕсли у сообщения уже был создан тред, то в ответе на запрос вернётся информация об уже созданном ранее треде.","parameters":[{"name":"id","in":"path","description":"Идентификатор сообщения","required":true,"schema":{"type":"integer","format":"int32","example":154332686},"example":154332686}],"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"threads:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый тред\n\n**Метод**: `POST`\n\n**Путь**: `/messages/{id}/thread`\n\n> **Скоуп:** `threads:create`\n\nМетод для создания нового треда к сообщению.\n\nЕсли у сообщения уже был создан тред, то в ответе на запрос вернётся информация об уже созданном ранее треде.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор сообщения\n\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/messages/154332686/thread\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тред\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686`\n - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": 154332686,\n \"message_chat_id\": 2637266154,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/oauth/token/info","summary":"Информация о токене","scope":null,"plan":null,"auth":true,"paginated":false,"command":"pachca oauth token-info","docLink":"https://dev.pachca.com/api/oauth/token-info","describe":"# GET /oauth/token/info — Информация о токене\n\n## Эквивалентная команда\n\n```bash\npachca oauth token-info \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/oauth/token-info\nПолная справка: `pachca api GET /oauth/token/info --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/oauth/token/info","description":"Информация о токене\n\nМетод для получения информации о текущем OAuth токене, включая его скоупы, дату создания и последнего использования. Токен в ответе маскируется — видны только первые 8 и последние 4 символа.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Токен доступа","required":["id","token","name","user_id","scopes","created_at","revoked_at","expires_in","last_used_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор токена","example":4827},"token":{"type":"string","description":"Маскированный токен (видны первые 8 и последние 4 символа)","example":"cH5kR9mN...x7Qp"},"name":{"type":"string","description":"Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную.","example":"Мой API токен","nullable":true},"user_id":{"type":"integer","format":"int64","description":"Идентификатор владельца токена","example":12},"scopes":{"type":"array","description":"Список скоупов токена","example":["messages:read","chats:read"],"items":{"type":"string","description":"Скоуп доступа OAuth токена","enum":["chats:read","chats:create","chats:update","chats:archive","chats:leave","chat_members:read","chat_members:write","chat_exports:read","chat_exports:write","messages:read","messages:create","messages:update","messages:delete","reactions:read","reactions:write","pins:write","threads:read","threads:create","link_previews:write","users:read","users:create","users:update","users:delete","group_tags:read","group_tags:write","bots:read","bots:write","bot_self:webhook:write","bot_self:write","profile:read","profile_status:read","profile_status:write","profile_avatar:write","user_status:read","user_status:write","user_avatar:write","custom_properties:read","audit_events:read","tasks:read","tasks:create","tasks:update","tasks:delete","files:read","files:write","uploads:write","views:write","webhooks:read","webhooks:write","webhooks:events:read","webhooks:events:delete","search:users","search:chats","search:messages"],"x-enum-descriptions":{"chats:read":"Просмотр чатов и списка чатов","chats:create":"Создание новых чатов","chats:update":"Изменение настроек чата","chats:archive":"Архивация и разархивация чатов","chats:leave":"Выход из чатов","chat_members:read":"Просмотр участников чата","chat_members:write":"Добавление, изменение и удаление участников чата","chat_exports:read":"Скачивание экспортов чата","chat_exports:write":"Создание экспортов чата","messages:read":"Просмотр сообщений в чатах","messages:create":"Отправка сообщений","messages:update":"Редактирование сообщений","messages:delete":"Удаление сообщений","reactions:read":"Просмотр реакций на сообщения","reactions:write":"Добавление и удаление реакций","pins:write":"Закрепление и открепление сообщений","threads:read":"Просмотр тредов (комментариев)","threads:create":"Создание тредов (комментариев)","link_previews:write":"Unfurl (разворачивание ссылок)","views:write":"Открытие форм (представлений)","users:read":"Просмотр информации о сотрудниках и списка сотрудников","users:create":"Создание новых сотрудников","users:update":"Редактирование данных сотрудника","users:delete":"Удаление сотрудников","group_tags:read":"Просмотр тегов","group_tags:write":"Создание, редактирование и удаление тегов","bots:read":"Просмотр ботов","bots:write":"Управление ботами","bot_self:webhook:write":"Самостоятельное управление адресом вебхука бота","bot_self:write":"Самостоятельное управление настройками бота","profile:read":"Просмотр информации о своем профиле","profile_status:read":"Просмотр статуса профиля","profile_status:write":"Изменение и удаление статуса профиля","profile_avatar:write":"Изменение и удаление аватара профиля","user_status:read":"Просмотр статуса сотрудника","user_status:write":"Изменение и удаление статуса сотрудника","user_avatar:write":"Изменение и удаление аватара сотрудника","custom_properties:read":"Просмотр дополнительных полей","audit_events:read":"Просмотр журнала аудита","tasks:read":"Просмотр задач","tasks:create":"Создание задач","tasks:update":"Изменение задачи","tasks:delete":"Удаление задачи","files:read":"Скачивание файлов","files:write":"Загрузка файлов","uploads:write":"Получение данных для загрузки файлов","webhooks:read":"Просмотр вебхуков","webhooks:write":"Создание и управление вебхуками","webhooks:events:read":"Просмотр лога вебхуков","webhooks:events:delete":"Удаление записи в логе вебхука","search:users":"Поиск сотрудников","search:chats":"Поиск чатов","search:messages":"Поиск сообщений"},"x-scope-roles":{"chats:read":["owner","admin","user","bot"],"chats:create":["owner","admin","user","bot"],"chats:update":["owner","admin","user","bot"],"chats:archive":["owner","admin","user","bot"],"chats:leave":["owner","admin","user","bot"],"chat_members:read":["owner","admin","user","bot"],"chat_members:write":["owner","admin","user","bot"],"chat_exports:read":["owner"],"chat_exports:write":["owner"],"messages:read":["owner","admin","user","bot"],"messages:create":["owner","admin","user","bot"],"messages:update":["owner","admin","user","bot"],"messages:delete":["owner","admin","user","bot"],"reactions:read":["owner","admin","user","bot"],"reactions:write":["owner","admin","user","bot"],"pins:write":["owner","admin","user","bot"],"threads:read":["owner","admin","user","bot"],"threads:create":["owner","admin","user","bot"],"link_previews:write":["owner","admin","user","bot"],"views:write":["owner","admin","user","bot"],"users:read":["owner","admin","user","bot"],"users:create":["owner","admin"],"users:update":["owner","admin"],"users:delete":["owner","admin"],"group_tags:read":["owner","admin"],"group_tags:write":["owner","admin"],"bots:read":["owner","admin","user"],"bots:write":["owner","admin","user"],"bot_self:webhook:write":["bot"],"bot_self:write":["bot"],"profile:read":["owner","admin","user","bot"],"profile_status:read":["owner","admin","user","bot"],"profile_status:write":["owner","admin","user","bot"],"profile_avatar:write":["owner","admin","user","bot"],"user_status:read":["owner","admin"],"user_status:write":["owner","admin"],"user_avatar:write":["owner","admin"],"custom_properties:read":["owner","admin","user","bot"],"audit_events:read":["owner"],"tasks:read":["owner","admin","user","bot"],"tasks:create":["owner","admin","user","bot"],"tasks:update":["owner","admin","user","bot"],"tasks:delete":["owner","admin","user","bot"],"files:read":["owner","admin","user","bot"],"files:write":["owner","admin","user","bot"],"uploads:write":["owner","admin","user","bot"],"webhooks:read":["owner","admin","user","bot"],"webhooks:write":["owner","admin","user","bot"],"webhooks:events:read":["owner","admin","user","bot"],"webhooks:events:delete":["owner","admin","user","bot"],"search:users":["owner","admin","user","bot"],"search:chats":["owner","admin","user","bot"],"search:messages":["owner","admin","user","bot"]},"$ref":"#/components/schemas/OAuthScope"}},"created_at":{"type":"string","format":"date-time","description":"Дата создания токена","example":"2025-01-15T10:30:00.000Z"},"revoked_at":{"type":"string","format":"date-time","description":"Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401.","example":null,"nullable":true},"expires_in":{"type":"integer","format":"int32","description":"Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно.","example":null,"nullable":true},"last_used_at":{"type":"string","format":"date-time","description":"Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать.","example":"2025-02-24T14:20:00.000Z","nullable":true}},"$ref":"#/components/schemas/AccessTokenInfo"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"paginated":false},"docs":"# Информация о токене\n\n**Метод**: `GET`\n\n**Путь**: `/oauth/token/info`\n\nМетод для получения информации о текущем OAuth токене, включая его скоупы, дату создания и последнего использования. Токен в ответе маскируется — видны только первые 8 и последние 4 символа.\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/oauth/token/info\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Токен доступа\n - `id: integer, int64` (required) — Идентификатор токена. Пример: `4827`\n - `token: string` (required) — Маскированный токен (видны первые 8 и последние 4 символа). Пример: `\"cH5kR9mN...x7Qp\"`\n - `name: string` (required, nullable) — Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную. Пример: `\"Мой API токен\"`\n - `user_id: integer, int64` (required) — Идентификатор владельца токена. Пример: `12`\n - `scopes: array of string` (required) — Список скоупов токена. Пример: `[\"messages:read\",\"chats:read\"]`\n - `created_at: date-time` (required) — Дата создания токена. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `revoked_at: date-time` (required, nullable) — Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401. Пример: `null`\n - `expires_in: integer, int32` (required, nullable) — Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно. Пример: `null`\n - `last_used_at: date-time` (required, nullable) — Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать. Пример: `\"2025-02-24T14:20:00.000Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 4827,\n \"token\": \"cH5kR9mN...x7Qp\",\n \"name\": \"Мой API токен\",\n \"user_id\": 12,\n \"scopes\": [\n \"messages:read\",\n \"chats:read\"\n ],\n \"created_at\": \"2025-01-15T10:30:00.000Z\",\n \"revoked_at\": null,\n \"expires_in\": null,\n \"last_used_at\": \"2025-02-24T14:20:00.000Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/profile","summary":"Свой профиль","scope":"profile:read","plan":null,"auth":true,"paginated":false,"command":"pachca profile get","docLink":"https://dev.pachca.com/api/profile/get","describe":"# GET /profile — Свой профиль\n\n> **Скоуп:** `profile:read`\n\n## Эквивалентная команда\n\n```bash\npachca profile get \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/get\nПолная справка: `pachca api GET /profile --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/profile","description":"Свой профиль\n\nМетод для получения информации о своем профиле.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"profile:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Свой профиль\n\n**Метод**: `GET`\n\n**Путь**: `/profile`\n\n> **Скоуп:** `profile:read`\n\nМетод для получения информации о своем профиле.\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/profile\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"PUT","path":"/profile/avatar","summary":"Загрузка своего аватара","scope":"profile_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile update-avatar","docLink":"https://dev.pachca.com/api/profile/update-avatar","describe":"# PUT /profile/avatar — Загрузка своего аватара\n\n> **Скоуп:** `profile_avatar:write`\n\n## Тело запроса\n\n- `image: binary` (required) — Файл изображения для аватара\n\n## Эквивалентная команда\n\n```bash\npachca profile update-avatar \\\n --file=./image.jpg \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/update-avatar\nПолная справка: `pachca api PUT /profile/avatar --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/profile/avatar","description":"Загрузка своего аватара\n\nМетод для загрузки или обновления аватара своего профиля. Файл передается в формате `multipart/form-data`.","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary","description":"Файл изображения для аватара"}}}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Данные аватара","required":["image_url"],"properties":{"image_url":{"type":"string","description":"URL аватара","example":"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg"}},"$ref":"#/components/schemas/AvatarData"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"profile_avatar:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Загрузка своего аватара\n\n**Метод**: `PUT`\n\n**Путь**: `/profile/avatar`\n\n> **Скоуп:** `profile_avatar:write`\n\nМетод для загрузки или обновления аватара своего профиля. Файл передается в формате `multipart/form-data`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `multipart/form-data`\n\n### Схема\n\n- `image: binary` (required) — Файл изображения для аватара\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/profile/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -F 'image=@filename.png'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Данные аватара\n - `image_url: string` (required) — URL аватара. Пример: `\"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"image_url\": \"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/profile/avatar","summary":"Удаление своего аватара","scope":"profile_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile delete-avatar","docLink":"https://dev.pachca.com/api/profile/delete-avatar","describe":"# DELETE /profile/avatar — Удаление своего аватара\n\n> **Скоуп:** `profile_avatar:write`\n\n## Эквивалентная команда\n\n```bash\npachca profile delete-avatar \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/delete-avatar\nПолная справка: `pachca api DELETE /profile/avatar --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/profile/avatar","description":"Удаление своего аватара\n\nМетод для удаления аватара своего профиля.","parameters":[],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}}},"requirements":{"scope":"profile_avatar:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление своего аватара\n\n**Метод**: `DELETE`\n\n**Путь**: `/profile/avatar`\n\n> **Скоуп:** `profile_avatar:write`\n\nМетод для удаления аватара своего профиля.\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/profile/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/profile/status","summary":"Свой статус","scope":"profile_status:read","plan":null,"auth":true,"paginated":false,"command":"pachca profile get-status","docLink":"https://dev.pachca.com/api/profile/get-status","describe":"# GET /profile/status — Свой статус\n\n> **Скоуп:** `profile_status:read`\n\n## Эквивалентная команда\n\n```bash\npachca profile get-status \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/get-status\nПолная справка: `pachca api GET /profile/status --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/profile/status","description":"Свой статус\n\nМетод для получения информации о своем статусе.\n\nЕсли статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"nullable":true,"properties":{"data":{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"profile_status:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Свой статус\n\n**Метод**: `GET`\n\n**Путь**: `/profile/status`\n\n> **Скоуп:** `profile_status:read`\n\nМетод для получения информации о своем статусе.\n\nЕсли статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента.\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/profile/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"PUT","path":"/profile/status","summary":"Новый свой статус","scope":"profile_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile update-status","docLink":"https://dev.pachca.com/api/profile/update-status","describe":"# PUT /profile/status — Новый свой статус\n\n> **Скоуп:** `profile_status:write`\n\n## Тело запроса\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса\n - `title: string` (required, max length: 50) — Текст статуса\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ\n - `is_away: boolean` — Режим «Нет на месте»\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.\n\n## Эквивалентная команда\n\n```bash\npachca profile update-status \\\n --emoji=🎮 \\\n --title='Очень занят' \\\n --expires-at=2024-04-08T10:00:00.000Z \\\n --is-away \\\n --away-message='Вернусь после 15:00' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/update-status\nПолная справка: `pachca api PUT /profile/status --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/profile/status","description":"Новый свой статус\n\nМетод для установки себе нового статуса.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на установку статуса","required":["status"],"properties":{"status":{"type":"object","required":["emoji","title"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z"},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":true},"away_message":{"type":"string","description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.","example":"Вернусь после 15:00","maxLength":1024}}}},"$ref":"#/components/schemas/StatusUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"profile_status:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый свой статус\n\n**Метод**: `PUT`\n\n**Путь**: `/profile/status`\n\n> **Скоуп:** `profile_status:write`\n\nМетод для установки себе нового статуса.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` — Режим «Нет на месте». Пример: `true`\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. Пример: `\"Вернусь после 15:00\"`\n\n### Пример\n\n```json\n{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/profile/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/profile/status","summary":"Удаление своего статуса","scope":"profile_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca profile delete-status","docLink":"https://dev.pachca.com/api/profile/delete-status","describe":"# DELETE /profile/status — Удаление своего статуса\n\n> **Скоуп:** `profile_status:write`\n\n## Эквивалентная команда\n\n```bash\npachca profile delete-status \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/profile/delete-status\nПолная справка: `pachca api DELETE /profile/status --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/profile/status","description":"Удаление своего статуса\n\nМетод для удаления своего статуса.","parameters":[],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"profile_status:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление своего статуса\n\n**Метод**: `DELETE`\n\n**Путь**: `/profile/status`\n\n> **Скоуп:** `profile_status:write`\n\nМетод для удаления своего статуса.\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/profile/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/search/chats","summary":"Поиск чатов","scope":"search:chats","plan":null,"auth":true,"paginated":true,"command":"pachca search list-chats","docLink":"https://dev.pachca.com/api/search/list-chats","describe":"# GET /search/chats — Поиск чатов\n\n> **Скоуп:** `search:chats`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Текст поискового запроса\n- `limit` — query: Количество возвращаемых результатов за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n- `order` — query: Направление сортировки\n- `created_from` — query: Фильтр по дате создания (от)\n- `created_to` — query: Фильтр по дате создания (до)\n- `active` — query: Фильтр по активности чата\n- `chat_subtype` — query: Фильтр по типу чата\n- `personal` — query: Фильтр по личным чатам\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca search list-chats \\\n --query=Разработка \\\n --limit=10 \\\n --order=desc \\\n --created-from=2025-01-01T00:00:00.000Z \\\n --created-to=2025-02-01T00:00:00.000Z \\\n --active \\\n --chat-subtype=discussion \\\n --no-personal \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/search/list-chats\nПолная справка: `pachca api GET /search/chats --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/search/chats","description":"Поиск чатов\n\nМетод для полнотекстового поиска каналов и бесед.","parameters":[{"name":"query","in":"query","description":"Текст поискового запроса","required":false,"schema":{"type":"string","example":"Разработка"},"example":"Разработка","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых результатов за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":100,"example":10,"maximum":100},"example":10,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"example":"desc","$ref":"#/components/schemas/SortOrder"},"example":"desc","explode":false},{"name":"created_from","in":"query","description":"Фильтр по дате создания (от)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"created_to","in":"query","description":"Фильтр по дате создания (до)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"active","in":"query","description":"Фильтр по активности чата","required":false,"schema":{"type":"boolean","example":true},"example":true,"explode":false},{"name":"chat_subtype","in":"query","description":"Фильтр по типу чата","required":false,"schema":{"type":"string","description":"Тип чата","enum":["discussion","thread"],"x-enum-descriptions":{"discussion":"Канал или беседа","thread":"Тред"},"example":"discussion","$ref":"#/components/schemas/ChatSubtype"},"example":"discussion","explode":false},{"name":"personal","in":"query","description":"Фильтр по личным чатам","required":false,"schema":{"type":"boolean","example":false},"example":false,"explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа поисковых результатов с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Чат","required":["id","name","created_at","owner_id","member_ids","group_tag_ids","channel","personal","public","last_message_at","meet_room_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор созданного чата","example":334},"name":{"type":"string","description":"Название","example":"🤿 aqua","maxLength":255},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего чат","example":185},"member_ids":{"type":"array","description":"Массив идентификаторов пользователей, участников","example":[185,186,187],"items":{"type":"integer","format":"int32"}},"group_tag_ids":{"type":"array","description":"Массив идентификаторов тегов, участников","example":[9111],"items":{"type":"integer","format":"int32"}},"channel":{"type":"boolean","description":"Является каналом","example":true},"personal":{"type":"boolean","description":"Является личным чатом","example":false},"public":{"type":"boolean","description":"Открытый доступ","example":false},"last_message_at":{"type":"string","format":"date-time","description":"Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:56:53.000Z"},"meet_room_url":{"type":"string","description":"Ссылка на Видеочат","example":"https://meet.pachca.com/aqua-94bb21b5"}},"$ref":"#/components/schemas/Chat"}},"meta":{"type":"object","description":"Мета-информация для пагинации поисковых результатов","required":["total","paginate"],"properties":{"total":{"type":"integer","format":"int32","description":"Общее количество найденных результатов","example":42},"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"}}}},"$ref":"#/components/schemas/SearchPaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"search:chats","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Поиск чатов\n\n**Метод**: `GET`\n\n**Путь**: `/search/chats`\n\n> **Скоуп:** `search:chats`\n\nМетод для полнотекстового поиска каналов и бесед.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Текст поискового запроса\n- `limit: integer, int32` (default: 100) — Количество возвращаемых результатов за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n- `order: string` — Направление сортировки\n Значения: `asc`, `desc`\n- `created_from: date-time` — Фильтр по дате создания (от)\n- `created_to: date-time` — Фильтр по дате создания (до)\n- `active: boolean` — Фильтр по активности чата\n- `chat_subtype: string` — Фильтр по типу чата\n Значения: `discussion`, `thread`\n- `personal: boolean` — Фильтр по личным чатам\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/search/chats?query=Разработка&limit=10&order=desc&created_from=2025-01-01T00:00:00.000Z&created_to=2025-02-01T00:00:00.000Z&active=true&chat_subtype=discussion&personal=false\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор созданного чата. Пример: `334`\n - `name: string` (required, max length: 255) — Название. Пример: `\"🤿 aqua\"`\n - `created_at: date-time` (required) — Дата и время создания чата (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, создавшего чат. Пример: `185`\n - `member_ids: array of integer` (required) — Массив идентификаторов пользователей, участников. Пример: `[185,186,187]`\n - `group_tag_ids: array of integer` (required) — Массив идентификаторов тегов, участников. Пример: `[9111]`\n - `channel: boolean` (required) — Является каналом. Пример: `true`\n - `personal: boolean` (required) — Является личным чатом. Пример: `false`\n - `public: boolean` (required) — Открытый доступ. Пример: `false`\n - `last_message_at: date-time` (required) — Дата и время создания последнего сообщения в чате (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:56:53.000Z\"`\n - `meet_room_url: string` (required) — Ссылка на Видеочат. Пример: `\"https://meet.pachca.com/aqua-94bb21b5\"`\n- `meta: object` (required) — Мета-информация для пагинации поисковых результатов\n - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42`\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 334,\n \"name\": \"🤿 aqua\",\n \"created_at\": \"2021-08-28T15:56:53.000Z\",\n \"owner_id\": 185,\n \"member_ids\": [\n 185,\n 186,\n 187\n ],\n \"group_tag_ids\": [\n 9111\n ],\n \"channel\": true,\n \"personal\": false,\n \"public\": false,\n \"last_message_at\": \"2021-08-28T15:56:53.000Z\",\n \"meet_room_url\": \"https://meet.pachca.com/aqua-94bb21b5\"\n }\n ],\n \"meta\": {\n \"total\": 42,\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/search/messages","summary":"Поиск сообщений","scope":"search:messages","plan":null,"auth":true,"paginated":true,"command":"pachca search list-messages","docLink":"https://dev.pachca.com/api/search/list-messages","describe":"# GET /search/messages — Поиск сообщений\n\n> **Скоуп:** `search:messages`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Текст поискового запроса\n- `limit` — query: Количество возвращаемых результатов за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n- `order` — query: Направление сортировки\n- `sort` — query: Сортировка результатов\n- `created_from` — query: Фильтр по дате создания (от)\n- `created_to` — query: Фильтр по дате создания (до)\n- `chat_ids` — query: Фильтр по ID чатов\n- `user_ids` — query: Фильтр по ID авторов сообщений\n- `active` — query: Фильтр по активности чата\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca search list-messages \\\n --query=футболки \\\n --limit=10 \\\n --order=desc \\\n --sort=created_at \\\n --created-from=2025-01-01T00:00:00.000Z \\\n --created-to=2025-02-01T00:00:00.000Z \\\n --chat-ids=198,334 \\\n --user-ids=12,185 \\\n --active \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/search/list-messages\nПолная справка: `pachca api GET /search/messages --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/search/messages","description":"Поиск сообщений\n\nМетод для полнотекстового поиска сообщений.","parameters":[{"name":"query","in":"query","description":"Текст поискового запроса","required":false,"schema":{"type":"string","example":"футболки"},"example":"футболки","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых результатов за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":200,"example":10,"maximum":200},"example":10,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"example":"desc","$ref":"#/components/schemas/SortOrder"},"example":"desc","explode":false},{"name":"sort","in":"query","description":"Сортировка результатов","required":false,"schema":{"default":"created_at","allOf":[{"type":"string","description":"Сортировка результатов поиска сообщений","enum":["created_at","relevance"],"x-enum-descriptions":{"created_at":"По дате создания (хронология)","relevance":"По релевантности"},"$ref":"#/components/schemas/MessageSearchSort"}]},"example":"created_at","explode":false},{"name":"created_from","in":"query","description":"Фильтр по дате создания (от)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"created_to","in":"query","description":"Фильтр по дате создания (до)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"chat_ids","in":"query","description":"Фильтр по ID чатов","required":false,"schema":{"type":"array","example":[198,334],"items":{"type":"integer","format":"int32"}},"example":[198,334],"explode":false},{"name":"user_ids","in":"query","description":"Фильтр по ID авторов сообщений","required":false,"schema":{"type":"array","example":[12,185],"items":{"type":"integer","format":"int32"}},"example":[12,185],"explode":false},{"name":"active","in":"query","description":"Фильтр по активности чата","required":false,"schema":{"type":"boolean","example":true},"example":true,"explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа поисковых результатов с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сообщение","required":["id","entity_type","entity_id","chat_id","root_chat_id","content","user_id","created_at","url","files","voice_content","buttons","thread","forwarding","parent_message_id","changed_at","deleted_at"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":194275},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя)","example":334},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":334},"root_chat_id":{"type":"integer","format":"int32","description":"Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`.","example":334},"content":{"type":"string","description":"Текст сообщения","example":"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего сообщение","example":12},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2021-08-28T15:57:23.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://app.pachca.com/chats/334?message=194275"},"files":{"type":"array","description":"Прикрепленные файлы","items":{"type":"object","description":"Файл","required":["id","key","name","file_type","url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор файла","example":3560},"key":{"type":"string","description":"Путь к файлу","example":"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png"},"name":{"type":"string","description":"Название файла с расширением","example":"congrat.png"},"file_type":{"description":"Тип файла","example":"image","allOf":[{"type":"string","description":"Тип файла","enum":["file","image","audio","voice"],"x-enum-descriptions":{"file":"Обычный файл","image":"Изображение","audio":"Аудиофайл","voice":"Голосовое сообщение"},"$ref":"#/components/schemas/FileType"}]},"url":{"type":"string","description":"Прямая ссылка на скачивание файла","example":"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8"},"width":{"type":"integer","format":"int32","description":"Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1920,"nullable":true},"height":{"type":"integer","format":"int32","description":"Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.","example":1080,"nullable":true}},"$ref":"#/components/schemas/File"}},"voice_content":{"type":"object","description":"Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.","nullable":true,"allOf":[{"type":"object","description":"Данные голосового сообщения","required":["duration_ms","waveform","transcript"],"properties":{"duration_ms":{"type":"integer","format":"int32","description":"Длительность голосового сообщения в миллисекундах","example":5400},"waveform":{"type":"string","description":"Форма волны (амплитуды) для визуализации голосового сообщения","example":"4,8,12,20,16,10,6,3"},"transcript":{"type":"string","description":"Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна.","example":"Привет, посмотри пожалуйста последний отчёт","nullable":true}},"$ref":"#/components/schemas/VoiceContent"}]},"buttons":{"type":"array","description":"Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.","nullable":true,"items":{"type":"array","items":{"type":"object","description":"Кнопка","required":["text"],"properties":{"text":{"type":"string","description":"Текст, отображаемый на кнопке","example":"Подробнее","maxLength":255},"url":{"type":"string","description":"Ссылка, которая будет открыта по нажатию кнопки","example":"https://example.com/details"},"data":{"type":"string","description":"Данные, которые будут отправлены в исходном вебхуке по нажатию кнопки","example":"awesome","maxLength":255}},"$ref":"#/components/schemas/Button"}}},"thread":{"type":"object","description":"Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.","required":["id","chat_id"],"nullable":true,"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор треда","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда","example":2637266155}}},"forwarding":{"type":"object","description":"Информация о пересланном сообщении. `null`, если сообщение не является пересланным.","nullable":true,"allOf":[{"type":"object","description":"Информация о пересланном сообщении","required":["original_message_id","original_chat_id","author_id","original_created_at","original_thread_id","original_thread_message_id","original_thread_parent_chat_id"],"properties":{"original_message_id":{"type":"integer","format":"int32","description":"Идентификатор оригинального сообщения","example":194275},"original_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится оригинальное сообщение","example":334},"author_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, создавшего оригинальное сообщение","example":12},"original_created_at":{"type":"string","format":"date-time","description":"Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-01-15T10:30:00.000Z"},"original_thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда, в котором находится оригинальное сообщение","example":null,"nullable":true},"original_thread_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true},"original_thread_parent_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.","example":null,"nullable":true}},"$ref":"#/components/schemas/Forwarding"}]},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.","example":null,"nullable":true},"display_avatar_url":{"type":"string","description":"Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"display_name":{"type":"string","description":"Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.","example":null,"nullable":true},"changed_at":{"type":"string","format":"date-time","description":"Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля.","example":"2021-08-28T16:10:00.000Z","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются.","example":null,"nullable":true}},"$ref":"#/components/schemas/Message"}},"meta":{"type":"object","description":"Мета-информация для пагинации поисковых результатов","required":["total","paginate"],"properties":{"total":{"type":"integer","format":"int32","description":"Общее количество найденных результатов","example":42},"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"}}}},"$ref":"#/components/schemas/SearchPaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"search:messages","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Поиск сообщений\n\n**Метод**: `GET`\n\n**Путь**: `/search/messages`\n\n> **Скоуп:** `search:messages`\n\nМетод для полнотекстового поиска сообщений.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Текст поискового запроса\n- `limit: integer, int32` (default: 200) — Количество возвращаемых результатов за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n- `order: string` — Направление сортировки\n Значения: `asc`, `desc`\n- `sort: string` (default: created_at) — Сортировка результатов\n- `created_from: date-time` — Фильтр по дате создания (от)\n- `created_to: date-time` — Фильтр по дате создания (до)\n- `chat_ids: array` — Фильтр по ID чатов\n- `user_ids: array` — Фильтр по ID авторов сообщений\n- `active: boolean` — Фильтр по активности чата\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/search/messages?query=футболки&limit=10&order=desc&sort=created_at&created_from=2025-01-01T00:00:00.000Z&created_to=2025-02-01T00:00:00.000Z&chat_ids[]=198&chat_ids[]=334&user_ids[]=12&user_ids[]=185&active=true\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `194275`\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение (беседы/канала, треда или пользователя). Пример: `334`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `334`\n - `root_chat_id: integer, int32` (required) — Идентификатор корневого чата. Для сообщений в тредах — идентификатор чата, в котором был создан тред. Для обычных сообщений совпадает с `chat_id`. Пример: `334`\n - `content: string` (required) — Текст сообщения. Пример: `\"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, создавшего сообщение. Пример: `12`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2021-08-28T15:57:23.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://app.pachca.com/chats/334?message=194275\"`\n - `files: array of object` (required) — Прикрепленные файлы\n - `id: integer, int32` (required) — Идентификатор файла. Пример: `3560`\n - `key: string` (required) — Путь к файлу. Пример: `\"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\"`\n - `name: string` (required) — Название файла с расширением. Пример: `\"congrat.png\"`\n - `file_type: string` (required) — Тип файла\n Значения: `file` — Обычный файл, `image` — Изображение, `audio` — Аудиофайл, `voice` — Голосовое сообщение\n - `url: string` (required) — Прямая ссылка на скачивание файла. Пример: `\"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\"`\n - `width: integer, int32` (nullable) — Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1920`\n - `height: integer, int32` (nullable) — Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. Пример: `1080`\n - `voice_content: object` (required) — Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.\n - `duration_ms: integer, int32` (required) — Длительность голосового сообщения в миллисекундах. Пример: `5400`\n - `waveform: string` (required) — Форма волны (амплитуды) для визуализации голосового сообщения. Пример: `\"4,8,12,20,16,10,6,3\"`\n - `transcript: string` (required, nullable) — Расшифровка голосового сообщения в текст. `null`, пока расшифровка не готова или недоступна. Пример: `\"Привет, посмотри пожалуйста последний отчёт\"`\n - `buttons: array of array` (required, nullable) — Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.\n - `thread: object` (required, nullable) — Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.\n - `id: integer, int64` (required) — Идентификатор треда. Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда. Пример: `2637266155`\n - `forwarding: object` (required) — Информация о пересланном сообщении. `null`, если сообщение не является пересланным.\n - `original_message_id: integer, int32` (required) — Идентификатор оригинального сообщения. Пример: `194275`\n - `original_chat_id: integer, int32` (required) — Идентификатор чата, в котором находится оригинальное сообщение. Пример: `334`\n - `author_id: integer, int32` (required) — Идентификатор пользователя, создавшего оригинальное сообщение. Пример: `12`\n - `original_created_at: date-time` (required) — Дата и время создания оригинального сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-01-15T10:30:00.000Z\"`\n - `original_thread_id: integer, int32` (required, nullable) — Идентификатор треда, в котором находится оригинальное сообщение. Пример: `null`\n - `original_thread_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `original_thread_parent_chat_id: integer, int32` (required, nullable) — Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. Пример: `null`\n - `parent_message_id: integer, int32` (required, nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `null`\n - `display_avatar_url: string` (nullable) — Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `display_name: string` (nullable) — Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. Пример: `null`\n - `changed_at: date-time` (required, nullable) — Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. Пример: `\"2021-08-28T16:10:00.000Z\"`\n - `deleted_at: date-time` (required, nullable) — Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. Пример: `null`\n- `meta: object` (required) — Мета-информация для пагинации поисковых результатов\n - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42`\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 194275,\n \"entity_type\": \"discussion\",\n \"entity_id\": 334,\n \"chat_id\": 334,\n \"root_chat_id\": 334,\n \"content\": \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n \"user_id\": 12,\n \"created_at\": \"2021-08-28T15:57:23.000Z\",\n \"url\": \"https://app.pachca.com/chats/334?message=194275\",\n \"files\": [\n {\n \"id\": 3560,\n \"key\": \"attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png\",\n \"name\": \"congrat.png\",\n \"file_type\": \"image\",\n \"url\": \"https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8\",\n \"width\": 1920,\n \"height\": 1080\n }\n ],\n \"voice_content\": {\n \"duration_ms\": 5400,\n \"waveform\": \"4,8,12,20,16,10,6,3\",\n \"transcript\": \"Привет, посмотри пожалуйста последний отчёт\"\n },\n \"buttons\": [\n [\n {\n \"text\": null\n }\n ]\n ],\n \"thread\": {\n \"id\": 265142,\n \"chat_id\": 2637266155\n },\n \"forwarding\": {\n \"original_message_id\": 194275,\n \"original_chat_id\": 334,\n \"author_id\": 12,\n \"original_created_at\": \"2025-01-15T10:30:00.000Z\",\n \"original_thread_id\": null,\n \"original_thread_message_id\": null,\n \"original_thread_parent_chat_id\": null\n },\n \"parent_message_id\": null,\n \"display_avatar_url\": null,\n \"display_name\": null,\n \"changed_at\": \"2021-08-28T16:10:00.000Z\",\n \"deleted_at\": null\n }\n ],\n \"meta\": {\n \"total\": 42,\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/search/users","summary":"Поиск сотрудников","scope":"search:users","plan":null,"auth":true,"paginated":true,"command":"pachca search list-users","docLink":"https://dev.pachca.com/api/search/list-users","describe":"# GET /search/users — Поиск сотрудников\n\n> **Скоуп:** `search:users`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Текст поискового запроса\n- `limit` — query: Количество возвращаемых результатов за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page`)\n- `sort` — query: Сортировка результатов\n- `order` — query: Направление сортировки\n- `created_from` — query: Фильтр по дате создания (от)\n- `created_to` — query: Фильтр по дате создания (до)\n- `company_roles` — query: Фильтр по ролям сотрудников\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca search list-users \\\n --query=Олег \\\n --limit=10 \\\n --sort=by_score \\\n --order=desc \\\n --created-from=2025-01-01T00:00:00.000Z \\\n --created-to=2025-02-01T00:00:00.000Z \\\n --company-roles=admin,user \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/search/list-users\nПолная справка: `pachca api GET /search/users --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/search/users","description":"Поиск сотрудников\n\nМетод для полнотекстового поиска сотрудников по имени, email, должности и другим полям.","parameters":[{"name":"query","in":"query","description":"Текст поискового запроса","required":false,"schema":{"type":"string","example":"Олег"},"example":"Олег","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых результатов за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":200,"example":10,"maximum":200},"example":10,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false},{"name":"sort","in":"query","description":"Сортировка результатов","required":false,"schema":{"type":"string","description":"Сортировка результатов поиска","enum":["by_score","alphabetical","creation"],"x-enum-descriptions":{"by_score":"По релевантности","alphabetical":"По алфавиту","creation":"По дате создания"},"example":"by_score","$ref":"#/components/schemas/SearchSortOrder"},"example":"by_score","explode":false},{"name":"order","in":"query","description":"Направление сортировки","required":false,"schema":{"type":"string","description":"Порядок сортировки","enum":["asc","desc"],"x-enum-descriptions":{"asc":"По возрастанию","desc":"По убыванию"},"example":"desc","$ref":"#/components/schemas/SortOrder"},"example":"desc","explode":false},{"name":"created_from","in":"query","description":"Фильтр по дате создания (от)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"created_to","in":"query","description":"Фильтр по дате создания (до)","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"company_roles","in":"query","description":"Фильтр по ролям сотрудников","required":false,"schema":{"type":"array","example":["admin","user"],"items":{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}},"example":["admin","user"],"explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа поисковых результатов с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Мета-информация для пагинации поисковых результатов","required":["total","paginate"],"properties":{"total":{"type":"integer","format":"int32","description":"Общее количество найденных результатов","example":42},"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"}}}},"$ref":"#/components/schemas/SearchPaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"search:users","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Поиск сотрудников\n\n**Метод**: `GET`\n\n**Путь**: `/search/users`\n\n> **Скоуп:** `search:users`\n\nМетод для полнотекстового поиска сотрудников по имени, email, должности и другим полям.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Текст поискового запроса\n- `limit: integer, int32` (default: 200) — Количество возвращаемых результатов за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page`)\n- `sort: string` — Сортировка результатов\n Значения: `by_score`, `alphabetical`, `creation`\n- `order: string` — Направление сортировки\n Значения: `asc`, `desc`\n- `created_from: date-time` — Фильтр по дате создания (от)\n- `created_to: date-time` — Фильтр по дате создания (до)\n- `company_roles: array` — Фильтр по ролям сотрудников\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/search/users?query=Олег&limit=10&sort=by_score&order=desc&created_from=2025-01-01T00:00:00.000Z&created_to=2025-02-01T00:00:00.000Z&company_roles[]=admin&company_roles[]=user\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Мета-информация для пагинации поисковых результатов\n - `total: integer, int32` (required) — Общее количество найденных результатов. Пример: `42`\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"total\": 42,\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"POST","path":"/tasks","summary":"Новое напоминание","scope":"tasks:create","plan":null,"auth":true,"paginated":false,"command":"pachca tasks create","docLink":"https://dev.pachca.com/api/tasks/create","describe":"# POST /tasks — Новое напоминание\n\n> **Скоуп:** `tasks:create`\n\n## Тело запроса\n\n- `task: object` (required) — Собранный объект параметров создаваемого напоминания\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание (по умолчанию — название типа)\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).\n - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно)\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)\n - `chat_id: integer, int32` — Идентификатор чата, к которому привязывается напоминание\n - `all_day: boolean` — Напоминание на весь день (без указания времени)\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required) — Устанавливаемое значение\n\n## Эквивалентная команда\n\n```bash\npachca tasks create \\\n --kind=reminder \\\n --content='Забрать со склада 21 заказ' \\\n --due-at=2020-06-05T12:00:00.000+03:00 \\\n --priority=2 \\\n --performer-ids='[12,13]' \\\n --chat-id=456 \\\n --no-all-day \\\n --custom-properties='[{\"id\":78,\"value\":\"Синий склад\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/create\nПолная справка: `pachca api POST /tasks --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/tasks","description":"Новое напоминание\n\nМетод для создания нового напоминания.\n\nПри создании напоминания обязательным условием является указания типа напоминания: звонок, встреча, простое напоминание, событие или письмо. При этом не требуется дополнительное описание - вы просто создадите напоминание с соответствующим текстом. Если вы укажите описание напоминания - то именно оно и станет текстом напоминания.\n\nУ напоминания должны быть ответственные, если их не указывать - ответственным назначается вы.\n\nОтветственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](GET /users).\n\nНапоминание можно привязать к чату, указав `chat_id`. Для привязки к чату необходимо быть его участником.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание напоминания","required":["task"],"properties":{"task":{"type":"object","description":"Собранный объект параметров создаваемого напоминания","required":["kind"],"properties":{"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание (по умолчанию — название типа)","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","example":"2020-06-05T12:00:00.000+03:00"},"priority":{"type":"integer","format":"int32","description":"Приоритет: 1, 2 (важно) или 3 (очень важно)","default":1,"example":2},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)","example":[12,13],"items":{"type":"integer","format":"int32"}},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязывается напоминание","example":456},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":78},"value":{"type":"string","description":"Устанавливаемое значение","example":"Синий склад"}}}}}}},"$ref":"#/components/schemas/TaskCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан.","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату.","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новое напоминание\n\n**Метод**: `POST`\n\n**Путь**: `/tasks`\n\n> **Скоуп:** `tasks:create`\n\nМетод для создания нового напоминания.\n\nПри создании напоминания обязательным условием является указания типа напоминания: звонок, встреча, простое напоминание, событие или письмо. При этом не требуется дополнительное описание - вы просто создадите напоминание с соответствующим текстом. Если вы укажите описание напоминания - то именно оно и станет текстом напоминания.\n\nУ напоминания должны быть ответственные, если их не указывать - ответственным назначается вы.\n\nОтветственным для напоминания без привязки к каким-либо сущностям может стать любой сотрудник компании. Актуальный состав сотрудников компании вы можете получить в методе [список сотрудников](GET /users).\n\nНапоминание можно привязать к чату, указав `chat_id`. Для привязки к чату необходимо быть его участником.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `task: object` (required) — Собранный объект параметров создаваемого напоминания\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание (по умолчанию — название типа). Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени). Пример: `\"2020-06-05T12:00:00.000+03:00\"`\n - `priority: integer, int32` (default: 1) — Приоритет: 1, 2 (важно) или 3 (очень важно). Пример: `2`\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы). Пример: `[12,13]`\n - `chat_id: integer, int32` — Идентификатор чата, к которому привязывается напоминание. Пример: `456`\n - `all_day: boolean` — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `78`\n - `value: string` (required) — Устанавливаемое значение. Пример: `\"Синий склад\"`\n\n### Пример\n\n```json\n{\n \"task\": {\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12,\n 13\n ],\n \"chat_id\": 456,\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/tasks\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"task\": {\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12,\n 13\n ],\n \"chat_id\": 456,\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Напоминание\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/tasks","summary":"Список напоминаний","scope":"tasks:read","plan":null,"auth":true,"paginated":true,"command":"pachca tasks list","docLink":"https://dev.pachca.com/api/tasks/list","describe":"# GET /tasks — Список напоминаний\n\n> **Скоуп:** `tasks:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca tasks list \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/list\nПолная справка: `pachca api GET /tasks --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/tasks","description":"Список напоминаний\n\nМетод для получения списка напоминаний.","parameters":[{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан.","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату.","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"tasks:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список напоминаний\n\n**Метод**: `GET`\n\n**Путь**: `/tasks`\n\n> **Скоуп:** `tasks:read`\n\nМетод для получения списка напоминаний.\n\n## Параметры\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/tasks?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/tasks/{id}","summary":"Информация о напоминании","scope":"tasks:read","plan":null,"auth":true,"paginated":false,"command":"pachca tasks get","docLink":"https://dev.pachca.com/api/tasks/get","describe":"# GET /tasks/{id} — Информация о напоминании\n\n> **Скоуп:** `tasks:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор напоминания\n\n## Эквивалентная команда\n\n```bash\npachca tasks get 22283 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/get\nПолная справка: `pachca api GET /tasks/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/tasks/{id}","description":"Информация о напоминании\n\nМетод для получения информации о напоминании.\n\nДля получения напоминания вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор напоминания","required":true,"schema":{"type":"integer","format":"int32","example":22283},"example":22283}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан.","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату.","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о напоминании\n\n**Метод**: `GET`\n\n**Путь**: `/tasks/{id}`\n\n> **Скоуп:** `tasks:read`\n\nМетод для получения информации о напоминании.\n\nДля получения напоминания вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор напоминания\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/tasks/22283\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Напоминание\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/tasks/{id}","summary":"Редактирование напоминания","scope":"tasks:update","plan":null,"auth":true,"paginated":false,"command":"pachca tasks update","docLink":"https://dev.pachca.com/api/tasks/update","describe":"# PUT /tasks/{id} — Редактирование напоминания\n\n> **Скоуп:** `tasks:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор напоминания\n\n## Тело запроса\n\n- `task: object` (required) — Собранный объект параметров обновляемого напоминания\n - `kind: string` — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).\n - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно)\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»\n - `status: string` — Статус\n Значения: `done` — Выполнено, `undone` — Активно\n - `all_day: boolean` — Напоминание на весь день (без указания времени)\n - `done_at: date-time` — Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required) — Устанавливаемое значение\n\n## Эквивалентная команда\n\n```bash\npachca tasks update 22283 \\\n --content='Забрать со склада 21 заказ' \\\n --due-at=2020-06-05T12:00:00.000+03:00 \\\n --priority=2 \\\n --performer-ids='[12]' \\\n --status=done \\\n --no-all-day \\\n --done-at=2020-06-05T12:00:00.000Z \\\n --custom-properties='[{\"id\":78,\"value\":\"Синий склад\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/update\nПолная справка: `pachca api PUT /tasks/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/tasks/{id}","description":"Редактирование напоминания\n\nМетод для редактирования напоминания.\n\nДля редактирования напоминания вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры напоминания указываются в теле запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор напоминания","required":true,"schema":{"type":"integer","format":"int32","example":22283},"example":22283}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на обновление напоминания","required":["task"],"properties":{"task":{"type":"object","description":"Собранный объект параметров обновляемого напоминания","properties":{"kind":{"description":"Тип","default":"reminder","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).","example":"2020-06-05T12:00:00.000+03:00"},"priority":{"type":"integer","format":"int32","description":"Приоритет: 1, 2 (важно) или 3 (очень важно)","example":2},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"status":{"description":"Статус","example":"done","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"done_at":{"type":"string","format":"date-time","description":"Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-05T12:00:00.000Z"},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":78},"value":{"type":"string","description":"Устанавливаемое значение","example":"Синий склад"}}}}}}},"$ref":"#/components/schemas/TaskUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Напоминание","required":["id","kind","content","due_at","priority","user_id","chat_id","status","created_at","performer_ids","all_day","custom_properties"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор напоминания","example":22283},"kind":{"description":"Тип","example":"reminder","allOf":[{"type":"string","description":"Тип задачи","enum":["call","meeting","reminder","event","email"],"x-enum-descriptions":{"call":"Позвонить контакту","meeting":"Встреча","reminder":"Простое напоминание","event":"Событие","email":"Написать письмо"},"$ref":"#/components/schemas/TaskKind"}]},"content":{"type":"string","description":"Описание","example":"Забрать со склада 21 заказ"},"due_at":{"type":"string","format":"date-time","description":"Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан.","example":"2020-06-05T09:00:00.000Z","nullable":true},"priority":{"type":"integer","format":"int32","description":"Приоритет","example":2},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя-создателя напоминания","example":12},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату.","example":334,"nullable":true},"status":{"description":"Статус напоминания","example":"undone","allOf":[{"type":"string","description":"Статус напоминания","enum":["done","undone"],"x-enum-descriptions":{"done":"Выполнено","undone":"Активно"},"$ref":"#/components/schemas/TaskStatus"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-04T10:37:57.000Z"},"performer_ids":{"type":"array","description":"Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные»","example":[12],"items":{"type":"integer","format":"int32"}},"all_day":{"type":"boolean","description":"Напоминание на весь день (без указания времени)","example":false},"custom_properties":{"type":"array","description":"Дополнительные поля напоминания","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}}},"$ref":"#/components/schemas/Task"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:update","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Редактирование напоминания\n\n**Метод**: `PUT`\n\n**Путь**: `/tasks/{id}`\n\n> **Скоуп:** `tasks:update`\n\nМетод для редактирования напоминания.\n\nДля редактирования напоминания вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры напоминания указываются в теле запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор напоминания\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `task: object` (required) — Собранный объект параметров обновляемого напоминания\n - `kind: string` — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` — Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени). Пример: `\"2020-06-05T12:00:00.000+03:00\"`\n - `priority: integer, int32` — Приоритет: 1, 2 (важно) или 3 (очень важно). Пример: `2`\n - `performer_ids: array of integer` — Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные». Пример: `[12]`\n - `status: string` — Статус\n Значения: `done` — Выполнено, `undone` — Активно\n - `all_day: boolean` — Напоминание на весь день (без указания времени). Пример: `false`\n - `done_at: date-time` — Дата и время выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-05T12:00:00.000Z\"`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `78`\n - `value: string` (required) — Устанавливаемое значение. Пример: `\"Синий склад\"`\n\n### Пример\n\n```json\n{\n \"task\": {\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12\n ],\n \"status\": \"done\",\n \"all_day\": false,\n \"done_at\": \"2020-06-05T12:00:00.000Z\",\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/tasks/22283\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"task\": {\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T12:00:00.000+03:00\",\n \"priority\": 2,\n \"performer_ids\": [\n 12\n ],\n \"status\": \"done\",\n \"all_day\": false,\n \"done_at\": \"2020-06-05T12:00:00.000Z\",\n \"custom_properties\": [\n {\n \"id\": 78,\n \"value\": \"Синий склад\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Напоминание\n - `id: integer, int32` (required) — Идентификатор напоминания. Пример: `22283`\n - `kind: string` (required) — Тип\n Значения: `call` — Позвонить контакту, `meeting` — Встреча, `reminder` — Простое напоминание, `event` — Событие, `email` — Написать письмо\n - `content: string` (required) — Описание. Пример: `\"Забрать со склада 21 заказ\"`\n - `due_at: date-time` (required, nullable) — Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. Пример: `\"2020-06-05T09:00:00.000Z\"`\n - `priority: integer, int32` (required) — Приоритет. Пример: `2`\n - `user_id: integer, int32` (required) — Идентификатор пользователя-создателя напоминания. Пример: `12`\n - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. Пример: `334`\n - `status: string` (required) — Статус напоминания\n Значения: `done` — Выполнено, `undone` — Активно\n - `created_at: date-time` (required) — Дата и время создания напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-04T10:37:57.000Z\"`\n - `performer_ids: array of integer` (required) — Массив идентификаторов пользователей, привязанных к напоминанию как «ответственные». Пример: `[12]`\n - `all_day: boolean` (required) — Напоминание на весь день (без указания времени). Пример: `false`\n - `custom_properties: array of object` (required) — Дополнительные поля напоминания\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 22283,\n \"kind\": \"reminder\",\n \"content\": \"Забрать со склада 21 заказ\",\n \"due_at\": \"2020-06-05T09:00:00.000Z\",\n \"priority\": 2,\n \"user_id\": 12,\n \"chat_id\": 334,\n \"status\": \"undone\",\n \"created_at\": \"2020-06-04T10:37:57.000Z\",\n \"performer_ids\": [\n 12\n ],\n \"all_day\": false,\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/tasks/{id}","summary":"Удаление напоминания","scope":"tasks:delete","plan":null,"auth":true,"paginated":false,"command":"pachca tasks delete","docLink":"https://dev.pachca.com/api/tasks/delete","describe":"# DELETE /tasks/{id} — Удаление напоминания\n\n> **Скоуп:** `tasks:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор напоминания\n\n## Эквивалентная команда\n\n```bash\npachca tasks delete 22283 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/tasks/delete\nПолная справка: `pachca api DELETE /tasks/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/tasks/{id}","description":"Удаление напоминания\n\nМетод для удаления напоминания.\n\nДля удаления напоминания вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор напоминания","required":true,"schema":{"type":"integer","format":"int32","example":22283},"example":22283}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"tasks:delete","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление напоминания\n\n**Метод**: `DELETE`\n\n**Путь**: `/tasks/{id}`\n\n> **Скоуп:** `tasks:delete`\n\nМетод для удаления напоминания.\n\nДля удаления напоминания вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор напоминания\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/tasks/22283\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/threads","summary":"Новый самостоятельный тред","scope":"threads:create","plan":null,"auth":true,"paginated":false,"command":"pachca threads create","docLink":"https://dev.pachca.com/api/threads/create","describe":"# POST /threads — Новый самостоятельный тред\n\n> **Скоуп:** `threads:create`\n\n## Эквивалентная команда\n\n```bash\npachca threads create \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/create\nПолная справка: `pachca api POST /threads --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/threads","description":"Новый самостоятельный тред\n\nМетод для создания самостоятельного треда — треда, не связанного с каким-либо сообщением.\n\nТело запроса не требуется. Создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`.","parameters":[],"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}}},"example":{"data":{"id":265142,"chat_id":2637266155,"message_id":null,"message_chat_id":null,"updated_at":"2023-02-01T19:20:47.204Z"}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"threads:create","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Новый самостоятельный тред\n\n**Метод**: `POST`\n\n**Путь**: `/threads`\n\n> **Скоуп:** `threads:create`\n\nМетод для создания самостоятельного треда — треда, не связанного с каким-либо сообщением.\n\nТело запроса не требуется. Создатель треда становится его единственным участником, а поля `message_id` и `message_chat_id` в ответе возвращаются как `null`.\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/threads\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тред\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686`\n - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": null,\n \"message_chat_id\": null,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"GET","path":"/threads","summary":"Список тредов","scope":"threads:read","plan":null,"auth":true,"paginated":true,"command":"pachca threads list","docLink":"https://dev.pachca.com/api/threads/list","describe":"# GET /threads — Список тредов\n\n> **Скоуп:** `threads:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `last_message_at_after` — query: Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before` — query: Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca threads list \\\n --last-message-at-after=2025-01-01T00:00:00.000Z \\\n --last-message-at-before=2025-02-01T00:00:00.000Z \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/list\nПолная справка: `pachca api GET /threads --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/threads","description":"Список тредов\n\nМетод для получения списка доступных тредов.\n\nВозвращаются треды, у которых вы являетесь участником чата треда либо чата, в котором был создан тред. Публичные чаты, в которых вы не состоите, в выдачу не попадают — чтобы такой тред попал в список, нужно быть участником чата треда или чата, в котором был создан тред.\n\nСортировка — по убыванию времени последнего сообщения в треде.","parameters":[{"name":"last_message_at_after","in":"query","description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-01-01T00:00:00.000Z"},"example":"2025-01-01T00:00:00.000Z","explode":false},{"name":"last_message_at_before","in":"query","description":"Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).","required":false,"schema":{"type":"string","format":"date-time","example":"2025-02-01T00:00:00.000Z"},"example":"2025-02-01T00:00:00.000Z","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"threads:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список тредов\n\n**Метод**: `GET`\n\n**Путь**: `/threads`\n\n> **Скоуп:** `threads:read`\n\nМетод для получения списка доступных тредов.\n\nВозвращаются треды, у которых вы являетесь участником чата треда либо чата, в котором был создан тред. Публичные чаты, в которых вы не состоите, в выдачу не попадают — чтобы такой тред попал в список, нужно быть участником чата треда или чата, в котором был создан тред.\n\nСортировка — по убыванию времени последнего сообщения в треде.\n\n## Параметры\n\n### Query параметры\n\n- `last_message_at_after: date-time` — Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не раньше чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `last_message_at_before: date-time` — Фильтрация по времени последнего сообщения в треде. Будут возвращены только те треды, время последнего сообщения в которых не позже чем указанное (в формате YYYY-MM-DDThh:mm:ss.sssZ).\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/threads?last_message_at_after=2025-01-01T00:00:00.000Z&last_message_at_before=2025-02-01T00:00:00.000Z&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686`\n - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": 154332686,\n \"message_chat_id\": 2637266154,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/threads/{id}","summary":"Информация о треде","scope":"threads:read","plan":null,"auth":true,"paginated":false,"command":"pachca threads get","docLink":"https://dev.pachca.com/api/threads/get","describe":"# GET /threads/{id} — Информация о треде\n\n> **Скоуп:** `threads:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор треда\n\n## Эквивалентная команда\n\n```bash\npachca threads get 265142 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/threads/get\nПолная справка: `pachca api GET /threads/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/threads/{id}","description":"Информация о треде\n\nМетод для получения информации о треде.\n\nДля получения треда вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор треда","required":true,"schema":{"type":"integer","format":"int32","example":265142},"example":265142}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Тред","required":["id","chat_id","message_id","message_chat_id","updated_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред)","example":265142},"chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages))","example":2637266155},"message_id":{"type":"integer","format":"int64","description":"Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":154332686,"nullable":true},"message_chat_id":{"type":"integer","format":"int64","description":"Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению.","example":2637266154,"nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2023-02-01T19:20:47.204Z"}},"$ref":"#/components/schemas/Thread"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"threads:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о треде\n\n**Метод**: `GET`\n\n**Путь**: `/threads/{id}`\n\n> **Скоуп:** `threads:read`\n\nМетод для получения информации о треде.\n\nДля получения треда вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор треда\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/threads/265142\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Тред\n - `id: integer, int64` (required) — Идентификатор созданного треда (используется для отправки [новых комментариев](POST /messages) в тред). Пример: `265142`\n - `chat_id: integer, int64` (required) — Идентификатор чата треда (используется для отправки [новых комментариев](POST /messages) в тред и получения [списка комментариев](GET /messages)). Пример: `2637266155`\n - `message_id: integer, int64` (required, nullable) — Идентификатор сообщения, к которому был создан тред. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `154332686`\n - `message_chat_id: integer, int64` (required, nullable) — Идентификатор чата сообщения. `null` для самостоятельного треда, созданного без привязки к сообщению. Пример: `2637266154`\n - `updated_at: date-time` (required) — Дата и время обновления треда (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2023-02-01T19:20:47.204Z\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 265142,\n \"chat_id\": 2637266155,\n \"message_id\": 154332686,\n \"message_chat_id\": 2637266154,\n \"updated_at\": \"2023-02-01T19:20:47.204Z\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/uploads","summary":"Получение подписи, ключа и других параметров","scope":"uploads:write","plan":null,"auth":true,"paginated":false,"command":"pachca files uploads","docLink":"https://dev.pachca.com/api/files/uploads","describe":"# POST /uploads — Получение подписи, ключа и других параметров\n\n> **Скоуп:** `uploads:write`\n\n## Эквивалентная команда\n\n```bash\npachca files uploads \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/files/uploads\nПолная справка: `pachca api POST /uploads --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/uploads","description":"Получение подписи, ключа и других параметров\n\nМетод для получения подписи, ключа и других параметров, необходимых для загрузки файла.\n\nДанный метод необходимо использовать для загрузки каждого файла.","parameters":[],"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Параметры для загрузки файла","required":["Content-Disposition","acl","policy","x-amz-credential","x-amz-algorithm","x-amz-date","x-amz-signature","key","direct_url"],"properties":{"Content-Disposition":{"type":"string","description":"Используемый заголовок (в данном запросе — attachment)","example":"attachment"},"acl":{"type":"string","description":"Уровень безопасности (в данном запросе — private)","example":"private"},"policy":{"type":"string","description":"Уникальная policy для загрузки файла","example":"eyJloNBpcmF0aW9uIjoiMjAyPi0xMi0wOFQwNjo1NzozNFHusCJjb82kaXRpb25zIjpbeyJidWNrZXQiOiJwYWNoY2EtcHJhYy11cGxvYWRzOu0sWyJzdGFydHMtd3l4aCIsIiRrZXkiLCJhdHRhY8hlcy9maWxlcy1xODUyMSJdLHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImF0dGFjaG1lbnQifSx2ImFjbCI3InByaXZhdGUifSx7IngtYW16LWNyZWRlbnRpYWwi2iIxNDIxNTVfc3RhcGx4LzIwMjIxMTI0L2J1LTFhL5MzL1F2czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjytQVdTNC1ITUFDLVNIQTI1NiJ7LHsieC1hbXotZGF0ZSI6IjIwMjIxMTI0VDA2NTczNFoifV12"},"x-amz-credential":{"type":"string","description":"x-amz-credential для загрузки файла","example":"286471_server/20211122/kz-6x/s3/aws4_request"},"x-amz-algorithm":{"type":"string","description":"Используемый алгоритм (в данном запросе — AWS4-HMAC-SHA256)","example":"AWS4-HMAC-SHA256"},"x-amz-date":{"type":"string","description":"Уникальный x-amz-date для загрузки файла","example":"20211122T065734Z"},"x-amz-signature":{"type":"string","description":"Уникальная подпись для загрузки файла","example":"87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475"},"key":{"type":"string","description":"Уникальный ключ для загрузки файла","example":"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}"},"direct_url":{"type":"string","description":"Адрес для загрузки файла","example":"https://api.pachca.com/api/v3/direct_upload"}},"$ref":"#/components/schemas/UploadParams"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}}},"requirements":{"scope":"uploads:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Получение подписи, ключа и других параметров\n\n**Метод**: `POST`\n\n**Путь**: `/uploads`\n\n> **Скоуп:** `uploads:write`\n\nМетод для получения подписи, ключа и других параметров, необходимых для загрузки файла.\n\nДанный метод необходимо использовать для загрузки каждого файла.\n\n## Пример запроса\n\n```bash\ncurl -X POST \"https://api.pachca.com/api/shared/v1/uploads\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `Content-Disposition: string` (required) — Используемый заголовок (в данном запросе — attachment). Пример: `\"attachment\"`\n- `acl: string` (required) — Уровень безопасности (в данном запросе — private). Пример: `\"private\"`\n- `policy: string` (required) — Уникальная policy для загрузки файла. Пример: `\"eyJloNBpcmF0aW9uIjoiMjAyPi0xMi0wOFQwNjo1NzozNFHusCJjb82kaXRpb25zIjpbeyJidWNrZXQiOiJwYWNoY2EtcHJhYy11cGxvYWRzOu0sWyJzdGFydHMtd3l4aCIsIiRrZXkiLCJhdHRhY8hlcy9maWxlcy1xODUyMSJdLHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImF0dGFjaG1lbnQifSx2ImFjbCI3InByaXZhdGUifSx7IngtYW16LWNyZWRlbnRpYWwi2iIxNDIxNTVfc3RhcGx4LzIwMjIxMTI0L2J1LTFhL5MzL1F2czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjytQVdTNC1ITUFDLVNIQTI1NiJ7LHsieC1hbXotZGF0ZSI6IjIwMjIxMTI0VDA2NTczNFoifV12\"`\n- `x-amz-credential: string` (required) — x-amz-credential для загрузки файла. Пример: `\"286471_server/20211122/kz-6x/s3/aws4_request\"`\n- `x-amz-algorithm: string` (required) — Используемый алгоритм (в данном запросе — AWS4-HMAC-SHA256). Пример: `\"AWS4-HMAC-SHA256\"`\n- `x-amz-date: string` (required) — Уникальный x-amz-date для загрузки файла. Пример: `\"20211122T065734Z\"`\n- `x-amz-signature: string` (required) — Уникальная подпись для загрузки файла. Пример: `\"87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475\"`\n- `key: string` (required) — Уникальный ключ для загрузки файла. Пример: `\"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}\"`\n- `direct_url: string` (required) — Адрес для загрузки файла. Пример: `\"https://api.pachca.com/api/v3/direct_upload\"`\n\n**Пример ответа:**\n\n```json\n{\n \"Content-Disposition\": \"attachment\",\n \"acl\": \"private\",\n \"policy\": \"eyJloNBpcmF0aW9uIjoiMjAyPi0xMi0wOFQwNjo1NzozNFHusCJjb82kaXRpb25zIjpbeyJidWNrZXQiOiJwYWNoY2EtcHJhYy11cGxvYWRzOu0sWyJzdGFydHMtd3l4aCIsIiRrZXkiLCJhdHRhY8hlcy9maWxlcy1xODUyMSJdLHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImF0dGFjaG1lbnQifSx2ImFjbCI3InByaXZhdGUifSx7IngtYW16LWNyZWRlbnRpYWwi2iIxNDIxNTVfc3RhcGx4LzIwMjIxMTI0L2J1LTFhL5MzL1F2czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjytQVdTNC1ITUFDLVNIQTI1NiJ7LHsieC1hbXotZGF0ZSI6IjIwMjIxMTI0VDA2NTczNFoifV12\",\n \"x-amz-credential\": \"286471_server/20211122/kz-6x/s3/aws4_request\",\n \"x-amz-algorithm\": \"AWS4-HMAC-SHA256\",\n \"x-amz-date\": \"20211122T065734Z\",\n \"x-amz-signature\": \"87e8f3ba4083c937c0e891d7a11tre932d8c33cg4bacf5380bf27624c1ok1475\",\n \"key\": \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/${filename}\",\n \"direct_url\": \"https://api.pachca.com/api/v3/direct_upload\"\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n"},{"method":"POST","path":"/users","summary":"Новый сотрудник","scope":"users:create","plan":null,"auth":true,"paginated":false,"command":"pachca users create","docLink":"https://dev.pachca.com/api/users/create","describe":"# POST /users — Новый сотрудник\n\n> **Скоуп:** `users:create`\n\n## Тело запроса\n\n- `user: object` (required)\n - `first_name: string` (max length: 255) — Имя\n - `last_name: string` (max length: 255) — Фамилия\n - `email: string` (required, max length: 255) — Электронная почта\n - `phone_number: string` (max length: 255) — Телефон\n - `nickname: string` (max length: 255) — Имя пользователя\n - `department: string` (max length: 255) — Департамент\n - `title: string` — Должность\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (default: false) — Деактивация пользователя\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику\n - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required, max length: 768) — Устанавливаемое значение\n- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.\n\n## Эквивалентная команда\n\n```bash\npachca users create \\\n --first-name=Олег \\\n --last-name=Петров \\\n --email=olegp@example.com \\\n --phone-number=+79001234567 \\\n --nickname=olegpetrov \\\n --department=Продукт \\\n --title=CIO \\\n --role=user \\\n --list-tags='[\"Product\",\"Design\"]' \\\n --chat-ids='[12345]' \\\n --custom-properties='[{\"id\":1678,\"value\":\"Санкт-Петербург\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/create\nПолная справка: `pachca api POST /users --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/users","description":"Новый сотрудник\n\nМетод для создания нового сотрудника в вашей компании.\n\nВы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).\n\nЧерез параметр `chat_ids` сотрудника можно сразу добавить в указанные чаты. Чтобы создать гостя, передайте `role: \"guest\"` — для этой роли `chat_ids` обязателен и должен содержать ровно один активный чат, в который у токена есть право добавлять участников. При нарушении правил гостевого доступа возвращается `400` с ошибкой по полю `chat_ids`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на создание сотрудника","required":["user"],"properties":{"user":{"type":"object","required":["email"],"properties":{"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","maxLength":255},"email":{"type":"string","description":"Электронная почта","example":"olegp@example.com","maxLength":255},"phone_number":{"type":"string","description":"Телефон","example":"+79001234567","maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"department":{"type":"string","description":"Департамент","example":"Продукт","maxLength":255},"title":{"type":"string","description":"Должность","example":"CIO"},"role":{"description":"Уровень доступа","example":"user","allOf":[{"type":"string","description":"Роль пользователя, допустимая при создании сотрудника. В отличие от редактирования, при создании можно назначить роль `guest` — в этом случае параметр `chat_ids` обязателен и должен содержать ровно один чат.","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserCreateRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","default":false,"example":false},"list_tags":{"type":"array","description":"Массив тегов, привязываемых к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"chat_ids":{"type":"array","description":"Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат.","example":[12345],"items":{"type":"integer","format":"int32"}},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"value":{"type":"string","description":"Устанавливаемое значение","example":"Санкт-Петербург","maxLength":768}}}}}},"skip_email_notify":{"type":"boolean","description":"Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.","default":false,"example":false}},"$ref":"#/components/schemas/UserCreateRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:create","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Новый сотрудник\n\n**Метод**: `POST`\n\n**Путь**: `/users`\n\n> **Скоуп:** `users:create`\n\nМетод для создания нового сотрудника в вашей компании.\n\nВы можете заполнять дополнительные поля сотрудника, которые созданы в вашей компании. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).\n\nЧерез параметр `chat_ids` сотрудника можно сразу добавить в указанные чаты. Чтобы создать гостя, передайте `role: \"guest\"` — для этой роли `chat_ids` обязателен и должен содержать ровно один активный чат, в который у токена есть право добавлять участников. При нарушении правил гостевого доступа возвращается `400` с ошибкой по полю `chat_ids`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `user: object` (required)\n - `first_name: string` (max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `email: string` (required, max length: 255) — Электронная почта. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (max length: 255) — Телефон. Пример: `\"+79001234567\"`\n - `nickname: string` (max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `department: string` (max length: 255) — Департамент. Пример: `\"Продукт\"`\n - `title: string` — Должность. Пример: `\"CIO\"`\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (default: false) — Деактивация пользователя. Пример: `false`\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `chat_ids: array of integer` — Идентификаторы чатов, в которые сотрудник будет добавлен сразу при создании. Для роли `guest` параметр обязателен и должен содержать ровно один активный чат. Пример: `[12345]`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `value: string` (required, max length: 768) — Устанавливаемое значение. Пример: `\"Санкт-Петербург\"`\n- `skip_email_notify: boolean` (default: false) — Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO. Пример: `false`\n\n### Пример\n\n```json\n{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"chat_ids\": [\n 12345\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/users\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"chat_ids\": [\n 12345\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/users","summary":"Список сотрудников","scope":"users:read","plan":null,"auth":true,"paginated":true,"command":"pachca users list","docLink":"https://dev.pachca.com/api/users/list","describe":"# GET /users — Список сотрудников\n\n> **Скоуп:** `users:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `query` — query: Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca users list \\\n --query=Олег \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/list\nПолная справка: `pachca api GET /users --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/users","description":"Список сотрудников\n\nМетод для получения актуального списка сотрудников вашей компании.","parameters":[{"name":"query","in":"query","description":"Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).","required":false,"schema":{"type":"string","example":"Олег"},"example":"Олег","explode":false},{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# Список сотрудников\n\n**Метод**: `GET`\n\n**Путь**: `/users`\n\n> **Скоуп:** `users:read`\n\nМетод для получения актуального списка сотрудников вашей компании.\n\n## Параметры\n\n### Query параметры\n\n- `query: string` — Поисковая фраза для фильтрации результатов. Поиск работает по полям: `first_name` (имя), `last_name` (фамилия), `email` (электронная почта), `phone_number` (телефон) и `nickname` (никнейм).\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/users?query=Олег&limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/users/{id}","summary":"Информация о сотруднике","scope":"users:read","plan":null,"auth":true,"paginated":false,"command":"pachca users get","docLink":"https://dev.pachca.com/api/users/get","describe":"# GET /users/{id} — Информация о сотруднике\n\n> **Скоуп:** `users:read`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users get 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/get\nПолная справка: `pachca api GET /users/{id} --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/users/{id}","description":"Информация о сотруднике\n\nМетод для получения информации о сотруднике.\n\nДля получения сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:read","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Информация о сотруднике\n\n**Метод**: `GET`\n\n**Путь**: `/users/{id}`\n\n> **Скоуп:** `users:read`\n\nМетод для получения информации о сотруднике.\n\nДля получения сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/users/12\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/users/{id}","summary":"Редактирование сотрудника","scope":"users:update","plan":null,"auth":true,"paginated":false,"command":"pachca users update","docLink":"https://dev.pachca.com/api/users/update","describe":"# PUT /users/{id} — Редактирование сотрудника\n\n> **Скоуп:** `users:update`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `user: object` (required) — Собранный объект параметров редактируемого сотрудника\n - `first_name: string` (max length: 255) — Имя\n - `last_name: string` (max length: 255) — Фамилия\n - `email: string` (max length: 255) — Электронная почта\n - `phone_number: string` (max length: 255) — Телефон\n - `nickname: string` (max length: 255) — Имя пользователя\n - `department: string` (max length: 255) — Департамент\n - `title: string` — Должность\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость\n - `suspended: boolean` (default: false) — Деактивация пользователя\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля\n - `value: string` (required, max length: 768) — Устанавливаемое значение\n\n## Эквивалентная команда\n\n```bash\npachca users update 12 \\\n --first-name=Олег \\\n --last-name=Петров \\\n --email=olegpetrov@example.com \\\n --phone-number=+79001234567 \\\n --nickname=olegpetrov \\\n --department='Отдел разработки' \\\n --title='Старший разработчик' \\\n --role=user \\\n --list-tags='[\"Product\"]' \\\n --custom-properties='[{\"id\":1678,\"value\":\"Санкт-Петербург\"}]' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/update\nПолная справка: `pachca api PUT /users/{id} --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/users/{id}","description":"Редактирование сотрудника\n\nМетод для редактирования сотрудника.\n\nДля редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).","parameters":[{"name":"id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на редактирование сотрудника","required":["user"],"properties":{"user":{"type":"object","description":"Собранный объект параметров редактируемого сотрудника","properties":{"first_name":{"type":"string","description":"Имя","example":"Олег","maxLength":255},"last_name":{"type":"string","description":"Фамилия","example":"Петров","maxLength":255},"email":{"type":"string","description":"Электронная почта","example":"olegpetrov@example.com","maxLength":255},"phone_number":{"type":"string","description":"Телефон","example":"+79001234567","maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"department":{"type":"string","description":"Департамент","example":"Отдел разработки","maxLength":255},"title":{"type":"string","description":"Должность","example":"Старший разработчик"},"role":{"description":"Уровень доступа","example":"user","allOf":[{"type":"string","description":"Роль пользователя, допустимая при редактировании сотрудника. Роль `guest` недоступна для установки через API при редактировании — назначить роль `guest` можно только при создании сотрудника (см. `UserCreateRole`).","enum":["admin","user","multi_guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость"},"$ref":"#/components/schemas/UserRoleInput"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","default":false,"example":false},"list_tags":{"type":"array","description":"Массив тегов, привязываемых к сотруднику","example":["Product"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Задаваемые дополнительные поля","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"value":{"type":"string","description":"Устанавливаемое значение","example":"Санкт-Петербург","maxLength":768}}}}}}},"$ref":"#/components/schemas/UserUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Сотрудник","required":["id","first_name","last_name","nickname","email","phone_number","department","title","role","suspended","invite_status","inviter_id","list_tags","custom_properties","user_status","bot","sso","created_at","last_activity_at","time_zone","image_url"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор пользователя","example":12},"first_name":{"type":"string","description":"Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).","example":"Олег","nullable":true,"maxLength":255},"last_name":{"type":"string","description":"Фамилия. Если не заполнена, возвращается `null` или пустая строка.","example":"Петров","nullable":true,"maxLength":255},"nickname":{"type":"string","description":"Имя пользователя","example":"olegpetrov","maxLength":255},"email":{"type":"string","description":"Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"olegp@example.com","nullable":true,"maxLength":255},"phone_number":{"type":"string","description":"Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников.","example":"+79001234567","nullable":true,"maxLength":255},"department":{"type":"string","description":"Департамент. Если не указан, возвращается `null` или пустая строка.","example":"Продукт","nullable":true,"maxLength":255},"title":{"type":"string","description":"Должность. Если не указана, возвращается `null` или пустая строка.","example":"CIO","nullable":true},"role":{"description":"Уровень доступа","example":"admin","allOf":[{"type":"string","description":"Роль пользователя в системе","enum":["admin","user","multi_guest","guest"],"x-enum-descriptions":{"admin":"Администратор","user":"Сотрудник","multi_guest":"Мульти-гость","guest":"Гость"},"$ref":"#/components/schemas/UserRole"}]},"suspended":{"type":"boolean","description":"Деактивация пользователя","example":false},"invite_status":{"description":"Статус приглашения","example":"confirmed","allOf":[{"type":"string","description":"Статус приглашения пользователя","enum":["confirmed","sent"],"x-enum-descriptions":{"confirmed":"Принято","sent":"Отправлено"},"$ref":"#/components/schemas/InviteStatus"}]},"inviter_id":{"type":"integer","format":"int32","description":"Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён.","example":185,"nullable":true},"list_tags":{"type":"array","description":"Массив тегов, привязанных к сотруднику","example":["Product","Design"],"items":{"type":"string"}},"custom_properties":{"type":"array","description":"Дополнительные поля сотрудника","items":{"type":"object","description":"Дополнительное поле","required":["id","name","data_type","value"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор поля","example":1678},"name":{"type":"string","description":"Название поля","example":"Город","maxLength":32},"data_type":{"description":"Тип поля","example":"string","allOf":[{"type":"string","description":"Тип данных дополнительного поля","enum":["string","number","date","link"],"x-enum-descriptions":{"string":"Строковое значение","number":"Числовое значение","date":"Дата","link":"Ссылка"},"$ref":"#/components/schemas/CustomPropertyDataType"}]},"value":{"type":"string","description":"Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.","example":"Санкт-Петербург","nullable":true,"maxLength":768}},"$ref":"#/components/schemas/CustomProperty"}},"user_status":{"type":"object","description":"Статус. `null`, если у сотрудника не установлен статус.","nullable":true,"allOf":[{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}]},"bot":{"type":"boolean","description":"Является ботом","example":false},"sso":{"type":"boolean","description":"Использует ли пользователь SSO","example":false},"created_at":{"type":"string","format":"date-time","description":"Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2020-06-08T09:32:57.000Z"},"last_activity_at":{"type":"string","format":"date-time","description":"Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.","example":"2025-01-20T13:40:07.000Z","nullable":true},"time_zone":{"type":"string","description":"Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.","example":"Europe/Moscow","nullable":true,"maxLength":32},"image_url":{"type":"string","description":"Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.","example":"https://app.pachca.com/users/12/photo.jpg","nullable":true}},"$ref":"#/components/schemas/User"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:update","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Редактирование сотрудника\n\n**Метод**: `PUT`\n\n**Путь**: `/users/{id}`\n\n> **Скоуп:** `users:update`\n\nМетод для редактирования сотрудника.\n\nДля редактирования сотрудника вам необходимо знать его `id` и указать его в `URL` запроса. Все редактируемые параметры сотрудника указываются в теле запроса. Получить актуальный список идентификаторов дополнительных полей сотрудника вы можете в методе [Список дополнительных полей](GET /custom_properties).\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `user: object` (required) — Собранный объект параметров редактируемого сотрудника\n - `first_name: string` (max length: 255) — Имя. Пример: `\"Олег\"`\n - `last_name: string` (max length: 255) — Фамилия. Пример: `\"Петров\"`\n - `email: string` (max length: 255) — Электронная почта. Пример: `\"olegpetrov@example.com\"`\n - `phone_number: string` (max length: 255) — Телефон. Пример: `\"+79001234567\"`\n - `nickname: string` (max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `department: string` (max length: 255) — Департамент. Пример: `\"Отдел разработки\"`\n - `title: string` — Должность. Пример: `\"Старший разработчик\"`\n - `role: string` — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость\n - `suspended: boolean` (default: false) — Деактивация пользователя. Пример: `false`\n - `list_tags: array of string` — Массив тегов, привязываемых к сотруднику. Пример: `[\"Product\"]`\n - `custom_properties: array of object` — Задаваемые дополнительные поля\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `value: string` (required, max length: 768) — Устанавливаемое значение. Пример: `\"Санкт-Петербург\"`\n\n### Пример\n\n```json\n{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegpetrov@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Отдел разработки\",\n \"title\": \"Старший разработчик\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/users/12\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"user\": {\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"email\": \"olegpetrov@example.com\",\n \"phone_number\": \"+79001234567\",\n \"nickname\": \"olegpetrov\",\n \"department\": \"Отдел разработки\",\n \"title\": \"Старший разработчик\",\n \"role\": \"user\",\n \"list_tags\": [\n \"Product\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"value\": \"Санкт-Петербург\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Сотрудник\n - `id: integer, int32` (required) — Идентификатор пользователя. Пример: `12`\n - `first_name: string` (required, nullable, max length: 255) — Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). Пример: `\"Олег\"`\n - `last_name: string` (required, nullable, max length: 255) — Фамилия. Если не заполнена, возвращается `null` или пустая строка. Пример: `\"Петров\"`\n - `nickname: string` (required, max length: 255) — Имя пользователя. Пример: `\"olegpetrov\"`\n - `email: string` (required, nullable, max length: 255) — Электронная почта. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"olegp@example.com\"`\n - `phone_number: string` (required, nullable, max length: 255) — Телефон. Возвращает `null` для ботов без права просмотра персональных данных, а также при запросе данных другого пользователя ботом, для которого скрыты персональные данные сотрудников. Пример: `\"+79001234567\"`\n - `department: string` (required, nullable, max length: 255) — Департамент. Если не указан, возвращается `null` или пустая строка. Пример: `\"Продукт\"`\n - `title: string` (required, nullable) — Должность. Если не указана, возвращается `null` или пустая строка. Пример: `\"CIO\"`\n - `role: string` (required) — Уровень доступа\n Значения: `admin` — Администратор, `user` — Сотрудник, `multi_guest` — Мульти-гость, `guest` — Гость\n - `suspended: boolean` (required) — Деактивация пользователя. Пример: `false`\n - `invite_status: string` (required) — Статус приглашения\n Значения: `confirmed` — Принято, `sent` — Отправлено\n - `inviter_id: integer, int32` (required, nullable) — Идентификатор сотрудника, который пригласил данного сотрудника. Возвращает `null`, если сотрудник зарегистрировался самостоятельно или если пригласивший сотрудник был удалён. Пример: `185`\n - `list_tags: array of string` (required) — Массив тегов, привязанных к сотруднику. Пример: `[\"Product\",\"Design\"]`\n - `custom_properties: array of object` (required) — Дополнительные поля сотрудника\n - `id: integer, int32` (required) — Идентификатор поля. Пример: `1678`\n - `name: string` (required, max length: 32) — Название поля. Пример: `\"Город\"`\n - `data_type: string` (required) — Тип поля\n Значения: `string` — Строковое значение, `number` — Числовое значение, `date` — Дата, `link` — Ссылка\n - `value: string` (required, nullable, max length: 768) — Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. Пример: `\"Санкт-Петербург\"`\n - `user_status: object` (required) — Статус. `null`, если у сотрудника не установлен статус.\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n - `bot: boolean` (required) — Является ботом. Пример: `false`\n - `sso: boolean` (required) — Использует ли пользователь SSO. Пример: `false`\n - `created_at: date-time` (required) — Дата создания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2020-06-08T09:32:57.000Z\"`\n - `last_activity_at: date-time` (required, nullable) — Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. Пример: `\"2025-01-20T13:40:07.000Z\"`\n - `time_zone: string` (required, nullable, max length: 32) — Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. Пример: `\"Europe/Moscow\"`\n - `image_url: string` (required, nullable) — Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. Пример: `\"https://app.pachca.com/users/12/photo.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"id\": 12,\n \"first_name\": \"Олег\",\n \"last_name\": \"Петров\",\n \"nickname\": \"olegpetrov\",\n \"email\": \"olegp@example.com\",\n \"phone_number\": \"+79001234567\",\n \"department\": \"Продукт\",\n \"title\": \"CIO\",\n \"role\": \"admin\",\n \"suspended\": false,\n \"invite_status\": \"confirmed\",\n \"inviter_id\": 185,\n \"list_tags\": [\n \"Product\",\n \"Design\"\n ],\n \"custom_properties\": [\n {\n \"id\": 1678,\n \"name\": \"Город\",\n \"data_type\": \"string\",\n \"value\": \"Санкт-Петербург\"\n }\n ],\n \"user_status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n },\n \"bot\": false,\n \"sso\": false,\n \"created_at\": \"2020-06-08T09:32:57.000Z\",\n \"last_activity_at\": \"2025-01-20T13:40:07.000Z\",\n \"time_zone\": \"Europe/Moscow\",\n \"image_url\": \"https://app.pachca.com/users/12/photo.jpg\"\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/users/{id}","summary":"Удаление сотрудника","scope":"users:delete","plan":null,"auth":true,"paginated":false,"command":"pachca users delete","docLink":"https://dev.pachca.com/api/users/delete","describe":"# DELETE /users/{id} — Удаление сотрудника\n\n> **Скоуп:** `users:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users delete 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/delete\nПолная справка: `pachca api DELETE /users/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/users/{id}","description":"Удаление сотрудника\n\nМетод для удаления сотрудника.\n\nДля удаления сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.","parameters":[{"name":"id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"users:delete","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление сотрудника\n\n**Метод**: `DELETE`\n\n**Путь**: `/users/{id}`\n\n> **Скоуп:** `users:delete`\n\nМетод для удаления сотрудника.\n\nДля удаления сотрудника вам необходимо знать его `id` и указать его в `URL` запроса.\n\n## Параметры\n\n### Path параметры\n\n- `id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/users/12\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/users/{user_id}/avatar","summary":"Загрузка аватара сотрудника","scope":"user_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca users update-avatar","docLink":"https://dev.pachca.com/api/users/update-avatar","describe":"# PUT /users/{user_id}/avatar — Загрузка аватара сотрудника\n\n> **Скоуп:** `user_avatar:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `image: binary` (required) — Файл изображения для аватара\n\n## Эквивалентная команда\n\n```bash\npachca users update-avatar 12 \\\n --file=./image.jpg \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/update-avatar\nПолная справка: `pachca api PUT /users/{user_id}/avatar --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/users/{user_id}/avatar","description":"Загрузка аватара сотрудника\n\nМетод для загрузки или обновления аватара сотрудника. Файл передается в формате `multipart/form-data`.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary","description":"Файл изображения для аватара"}}}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Данные аватара","required":["image_url"],"properties":{"image_url":{"type":"string","description":"URL аватара","example":"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg"}},"$ref":"#/components/schemas/AvatarData"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_avatar:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Загрузка аватара сотрудника\n\n**Метод**: `PUT`\n\n**Путь**: `/users/{user_id}/avatar`\n\n> **Скоуп:** `user_avatar:write`\n\nМетод для загрузки или обновления аватара сотрудника. Файл передается в формате `multipart/form-data`.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `multipart/form-data`\n\n### Схема\n\n- `image: binary` (required) — Файл изображения для аватара\n\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/users/12/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -F 'image=@filename.png'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Данные аватара\n - `image_url: string` (required) — URL аватара. Пример: `\"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"image_url\": \"https://pachca-prod.s3.amazonaws.com/uploads/0001/0001/image.jpg\"\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/users/{user_id}/avatar","summary":"Удаление аватара сотрудника","scope":"user_avatar:write","plan":null,"auth":true,"paginated":false,"command":"pachca users remove-avatar","docLink":"https://dev.pachca.com/api/users/remove-avatar","describe":"# DELETE /users/{user_id}/avatar — Удаление аватара сотрудника\n\n> **Скоуп:** `user_avatar:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users remove-avatar 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/remove-avatar\nПолная справка: `pachca api DELETE /users/{user_id}/avatar --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/users/{user_id}/avatar","description":"Удаление аватара сотрудника\n\nМетод для удаления аватара сотрудника.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"},{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}]}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_avatar:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление аватара сотрудника\n\n**Метод**: `DELETE`\n\n**Путь**: `/users/{user_id}/avatar`\n\n> **Скоуп:** `user_avatar:write`\n\nМетод для удаления аватара сотрудника.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/users/12/avatar\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n**anyOf** - один из вариантов:\n\n- **ApiError**: Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)\n - `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n- **OAuthError**: Ошибка OAuth авторизации (используется для 401 и 403)\n - `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n - `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/users/{user_id}/status","summary":"Статус сотрудника","scope":"user_status:read","plan":null,"auth":true,"paginated":false,"command":"pachca users get-status","docLink":"https://dev.pachca.com/api/users/get-status","describe":"# GET /users/{user_id}/status — Статус сотрудника\n\n> **Скоуп:** `user_status:read`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users get-status 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/get-status\nПолная справка: `pachca api GET /users/{user_id}/status --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/users/{user_id}/status","description":"Статус сотрудника\n\nМетод для получения информации о статусе сотрудника.\n\nЕсли статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"nullable":true,"properties":{"data":{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_status:read","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Статус сотрудника\n\n**Метод**: `GET`\n\n**Путь**: `/users/{user_id}/status`\n\n> **Скоуп:** `user_status:read`\n\nМетод для получения информации о статусе сотрудника.\n\nЕсли статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/users/12/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"PUT","path":"/users/{user_id}/status","summary":"Новый статус сотрудника","scope":"user_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca users update-status","docLink":"https://dev.pachca.com/api/users/update-status","describe":"# PUT /users/{user_id}/status — Новый статус сотрудника\n\n> **Скоуп:** `user_status:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Тело запроса\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса\n - `title: string` (required, max length: 50) — Текст статуса\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ\n - `is_away: boolean` — Режим «Нет на месте»\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.\n\n## Эквивалентная команда\n\n```bash\npachca users update-status 12 \\\n --emoji=🎮 \\\n --title='Очень занят' \\\n --expires-at=2024-04-08T10:00:00.000Z \\\n --is-away \\\n --away-message='Вернусь после 15:00' \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/update-status\nПолная справка: `pachca api PUT /users/{user_id}/status --docs` · схема: `--spec`\n","spec":{"method":"PUT","path":"/users/{user_id}/status","description":"Новый статус сотрудника\n\nМетод для установки нового статуса сотруднику.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Запрос на установку статуса","required":["status"],"properties":{"status":{"type":"object","required":["emoji","title"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-04-08T10:00:00.000Z"},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":true},"away_message":{"type":"string","description":"Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях.","example":"Вернусь после 15:00","maxLength":1024}}}},"$ref":"#/components/schemas/StatusUpdateRequest"}}}},"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными","required":["data"],"properties":{"data":{"type":"object","description":"Статус пользователя","required":["emoji","title","expires_at","is_away","away_message"],"properties":{"emoji":{"type":"string","description":"Emoji символ статуса","example":"🎮"},"title":{"type":"string","description":"Текст статуса","example":"Очень занят","maxLength":50},"expires_at":{"type":"string","format":"date-time","description":"Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.","example":"2024-04-08T10:00:00.000Z","nullable":true},"is_away":{"type":"boolean","description":"Режим «Нет на месте»","example":false},"away_message":{"type":"object","description":"Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.","required":["text"],"nullable":true,"properties":{"text":{"type":"string","description":"Текст сообщения","example":"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.","maxLength":1024}}}},"$ref":"#/components/schemas/UserStatus"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_status:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Новый статус сотрудника\n\n**Метод**: `PUT`\n\n**Путь**: `/users/{user_id}/status`\n\n> **Скоуп:** `user_status:write`\n\nМетод для установки нового статуса сотруднику.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `status: object` (required)\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` — Режим «Нет на месте». Пример: `true`\n - `away_message: string` (max length: 1024) — Текст сообщения при режиме «Нет на месте». Отображается в профиле и при личных сообщениях/упоминаниях. Пример: `\"Вернусь после 15:00\"`\n\n### Пример\n\n```json\n{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl -X PUT \"https://api.pachca.com/api/shared/v1/users/12/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"status\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": true,\n \"away_message\": \"Вернусь после 15:00\"\n }\n}'\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: object` (required) — Статус пользователя\n - `emoji: string` (required) — Emoji символ статуса. Пример: `\"🎮\"`\n - `title: string` (required, max length: 50) — Текст статуса. Пример: `\"Очень занят\"`\n - `expires_at: date-time` (required, nullable) — Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. Пример: `\"2024-04-08T10:00:00.000Z\"`\n - `is_away: boolean` (required) — Режим «Нет на месте». Пример: `false`\n - `away_message: object` (required, nullable) — Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.\n - `text: string` (required, max length: 1024) — Текст сообщения. Пример: `\"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": {\n \"emoji\": \"🎮\",\n \"title\": \"Очень занят\",\n \"expires_at\": \"2024-04-08T10:00:00.000Z\",\n \"is_away\": false,\n \"away_message\": {\n \"text\": \"Я в отпуске до 15 апреля. По срочным вопросам обращайтесь к @ivanov.\"\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/users/{user_id}/status","summary":"Удаление статуса сотрудника","scope":"user_status:write","plan":null,"auth":true,"paginated":false,"command":"pachca users remove-status","docLink":"https://dev.pachca.com/api/users/remove-status","describe":"# DELETE /users/{user_id}/status — Удаление статуса сотрудника\n\n> **Скоуп:** `user_status:write`\n\n## Параметры\n\n- `user_id` — путь (обязательный): Идентификатор пользователя\n\n## Эквивалентная команда\n\n```bash\npachca users remove-status 12 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/users/remove-status\nПолная справка: `pachca api DELETE /users/{user_id}/status --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/users/{user_id}/status","description":"Удаление статуса сотрудника\n\nМетод для удаления статуса сотрудника.","parameters":[{"name":"user_id","in":"path","description":"Идентификатор пользователя","required":true,"schema":{"type":"integer","format":"int32","example":12},"example":12}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"user_status:write","scopeRoles":["owner","admin"]},"paginated":false},"docs":"# Удаление статуса сотрудника\n\n**Метод**: `DELETE`\n\n**Путь**: `/users/{user_id}/status`\n\n> **Скоуп:** `user_status:write`\n\nМетод для удаления статуса сотрудника.\n\n## Параметры\n\n### Path параметры\n\n- `user_id: integer, int32` (required) — Идентификатор пользователя\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/users/12/status\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"POST","path":"/views/open","summary":"Открытие представления","scope":"views:write","plan":null,"auth":true,"paginated":false,"command":"pachca views open","docLink":"https://dev.pachca.com/api/views/open","describe":"# POST /views/open — Открытие представления\n\n> **Скоуп:** `views:write`\n\n## Тело запроса\n\n- `type: string` (required) — Способ открытия представления\n Значения: `modal` — Модальное окно\n- `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)\n- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.\n- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.\n- `view: object` (required) — Собранный объект представления\n - `title: string` (required, max length: 24) — Заголовок представления\n - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.\n - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы\n - `blocks: array (union)` (required, max items: 100) — Массив блоков представления\n **Возможные типы элементов:**\n\n - **ViewBlockHeader**: Блок header — заголовок\n - `type: string` (required) — Тип блока\n Значения: `header` — Для заголовков всегда header\n - `text: string` (required, max length: 150) — Текст заголовка\n - **ViewBlockPlainText**: Блок plain_text — обычный текст\n - `type: string` (required) — Тип блока\n Значения: `plain_text` — Для обычного текста всегда plain_text\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockMarkdown**: Блок markdown — форматированный текст\n - `type: string` (required) — Тип блока\n Значения: `markdown` — Для форматированного текста всегда markdown\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockDivider**: Блок divider — разделитель\n - `type: string` (required) — Тип блока\n Значения: `divider` — Для разделителя всегда divider\n - **ViewBlockInput**: Блок input — текстовое поле ввода\n - `type: string` (required) — Тип блока\n Значения: `input` — Для текстового поля всегда input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `placeholder: string` (max length: 150) — Подсказка внутри поля ввода, пока оно пустое\n - `multiline: boolean` (default: false) — Многострочное поле\n - `initial_value: string` (max length: 3000) — Начальное значение в поле\n - `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.\n - `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockSelect**: Блок select — выпадающий список\n - `type: string` (required) — Тип блока\n Значения: `select` — Для выпадающего списка всегда select\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к выпадающему списку\n - `options: array of object` (max items: 100) — Массив доступных пунктов в выпадающем списке\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под выпадающим списком серым цветом\n - **ViewBlockRadio**: Блок radio — радиокнопки\n - `type: string` (required) — Тип блока\n Значения: `radio` — Для радиокнопок всегда radio\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе радиокнопок\n - `options: array of object` (max items: 10) — Массив радиокнопок\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой радиокнопок серым цветом\n - **ViewBlockCheckbox**: Блок checkbox — чекбоксы\n - `type: string` (required) — Тип блока\n Значения: `checkbox` — Для чекбоксов всегда checkbox\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе чекбоксов\n - `options: array of object` (max items: 10) — Массив чекбоксов\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `checked: boolean` — Изначально выбранный пункт\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой чекбоксов серым цветом\n - **ViewBlockDate**: Блок date — выбор даты\n - `type: string` (required) — Тип блока\n Значения: `date` — Для выбора даты всегда date\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_date: date` — Начальное значение в поле в формате YYYY-MM-DD\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockTime**: Блок time — выбор времени\n - `type: string` (required) — Тип блока\n Значения: `time` — Для выбора времени всегда time\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_time: string, time` — Начальное значение в поле в формате HH:mm\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockFileInput**: Блок file_input — загрузка файлов\n - `type: string` (required) — Тип блока\n Значения: `file_input` — Для загрузки файлов всегда file_input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, [\"png\",\"jpg\",\"gif\"]). Если это поле не указано, все расширения файлов будут приняты.\n - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n\n## Эквивалентная команда\n\n```bash\npachca views open \\\n --title='Уведомление об отпуске' \\\n --close-text=Закрыть \\\n --submit-text='Отправить заявку' \\\n --blocks='[{\"type\":\"header\",\"text\":\"Основная информация\"},{\"type\":\"plain_text\",\"text\":\"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"},{\"type\":\"markdown\",\"text\":\"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"},{\"type\":\"divider\"},{\"type\":\"input\",\"name\":\"info\",\"label\":\"Описание отпуска\",\"placeholder\":\"Куда собираетесь и что будете делать\",\"multiline\":true,\"initial_value\":\"Начальный текст\",\"min_length\":10,\"max_length\":500,\"required\":true,\"hint\":\"Возможно вам подскаджут, какие места лучше посетить\"},{\"type\":\"select\",\"name\":\"team\",\"label\":\"Выберите команду\",\"options\":[{\"text\":\"Ничего\",\"value\":\"nothing\",\"selected\":true}],\"hint\":\"Выберите одну из команд\"},{\"type\":\"radio\",\"name\":\"accessibility\",\"label\":\"Доступность\",\"options\":[{\"text\":\"Ничего\",\"value\":\"nothing\",\"description\":\"Каждый день бот будет присылать список новых задач в вашей команде\",\"selected\":true}],\"required\":true,\"hint\":\"Если вы не планируете выходить на связь, то выберите вариант Ничего\"},{\"type\":\"checkbox\",\"name\":\"newsletters\",\"label\":\"Рассылки\",\"options\":[{\"text\":\"Ничего\",\"value\":\"nothing\",\"description\":\"Каждый день бот будет присылать список новых задач в вашей команде\",\"checked\":true}],\"hint\":\"Выберите интересующие вас рассылки\"},{\"type\":\"date\",\"name\":\"date_start\",\"label\":\"Дата начала отпуска\",\"initial_date\":\"2025-07-01\",\"required\":true,\"hint\":\"Укажите дату начала отпуска\"},{\"type\":\"time\",\"name\":\"newsletter_time\",\"label\":\"Время рассылки\",\"initial_time\":\"11:00\",\"hint\":\"Укажите, в какое время присылать выбранные рассылки\"},{\"type\":\"file_input\",\"name\":\"request_doc\",\"label\":\"Заявление\",\"filetypes\":[\"pdf\",\"jpg\",\"png\"],\"max_files\":1,\"required\":true,\"hint\":\"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"}]' \\\n --type=modal \\\n --trigger-id=791a056b-006c-49dd-834b-c633fde52fe8 \\\n --private-metadata='{\"timeoff_id\":4378}' \\\n --callback-id=timeoff_request_form \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/views/open\nПолная справка: `pachca api POST /views/open --docs` · схема: `--spec`\n","spec":{"method":"POST","path":"/views/open","description":"Открытие представления\n\nМетод для открытия модального окна с представлением для пользователя.\n\nЧтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший `trigger_id`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Представление","required":["type","trigger_id","view"],"properties":{"type":{"type":"string","description":"Способ открытия представления","enum":["modal"],"x-enum-descriptions":{"modal":"Модальное окно"},"example":"modal"},"trigger_id":{"type":"string","description":"Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)","example":"791a056b-006c-49dd-834b-c633fde52fe8"},"private_metadata":{"type":"string","description":"Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой.","example":"{\"timeoff_id\":4378}","maxLength":3000},"callback_id":{"type":"string","description":"Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.","example":"timeoff_request_form","maxLength":255},"view":{"type":"object","description":"Собранный объект представления","required":["title","blocks"],"properties":{"title":{"type":"string","description":"Заголовок представления","example":"Уведомление об отпуске","maxLength":24},"close_text":{"type":"string","description":"Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.","default":"Отменить","example":"Закрыть","maxLength":24},"submit_text":{"type":"string","description":"Текст кнопки отправки формы","default":"Отправить","example":"Отправить заявку","maxLength":24},"blocks":{"type":"array","description":"Массив блоков представления","maxItems":100,"items":{"description":"Union-тип для всех возможных блоков представления","anyOf":[{"type":"object","description":"Блок header — заголовок","required":["type","text"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["header"],"x-enum-descriptions":{"header":"Для заголовков всегда header"},"example":"header"},"text":{"type":"string","description":"Текст заголовка","example":"Основная информация","maxLength":150}},"$ref":"#/components/schemas/ViewBlockHeader"},{"type":"object","description":"Блок plain_text — обычный текст","required":["type","text"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["plain_text"],"x-enum-descriptions":{"plain_text":"Для обычного текста всегда plain_text"},"example":"plain_text"},"text":{"type":"string","description":"Текст","example":"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.","maxLength":12000}},"$ref":"#/components/schemas/ViewBlockPlainText"},{"type":"object","description":"Блок markdown — форматированный текст","required":["type","text"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["markdown"],"x-enum-descriptions":{"markdown":"Для форматированного текста всегда markdown"},"example":"markdown"},"text":{"type":"string","description":"Текст","example":"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)","maxLength":12000}},"$ref":"#/components/schemas/ViewBlockMarkdown"},{"type":"object","description":"Блок divider — разделитель","required":["type"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["divider"],"x-enum-descriptions":{"divider":"Для разделителя всегда divider"},"example":"divider"}},"$ref":"#/components/schemas/ViewBlockDivider"},{"type":"object","description":"Блок input — текстовое поле ввода","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["input"],"x-enum-descriptions":{"input":"Для текстового поля всегда input"},"example":"input"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"info","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Описание отпуска","maxLength":150},"placeholder":{"type":"string","description":"Подсказка внутри поля ввода, пока оно пустое","example":"Куда собираетесь и что будете делать","maxLength":150},"multiline":{"type":"boolean","description":"Многострочное поле","default":false,"example":true},"initial_value":{"type":"string","description":"Начальное значение в поле","example":"Начальный текст","maxLength":3000},"min_length":{"type":"integer","format":"int32","description":"Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.","example":10,"minimum":0,"maximum":3000},"max_length":{"type":"integer","format":"int32","description":"Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.","example":500,"minimum":1,"maximum":3000},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Возможно вам подскаджут, какие места лучше посетить","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockInput"},{"type":"object","description":"Блок select — выпадающий список","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["select"],"x-enum-descriptions":{"select":"Для выпадающего списка всегда select"},"example":"select"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора","example":"team","maxLength":255},"label":{"type":"string","description":"Подпись к выпадающему списку","example":"Выберите команду","maxLength":150},"options":{"type":"array","description":"Массив доступных пунктов в выпадающем списке","maxItems":100,"items":{"type":"object","description":"Пункт выпадающего списка (select). В отличие от radio/checkbox, у пункта select нет подзаголовка `description` — веб его не отображает.","required":["text","value"],"properties":{"text":{"type":"string","description":"Отображаемый текст","example":"Ничего","maxLength":75},"value":{"type":"string","description":"Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта","example":"nothing","maxLength":150},"selected":{"type":"boolean","description":"Изначально выбранный пункт. Только один пункт может быть выбран.","example":true}},"$ref":"#/components/schemas/ViewBlockSelectOption"}},"required":{"type":"boolean","description":"Обязательность","default":false,"example":false},"hint":{"type":"string","description":"Подсказка, которая отображается под выпадающим списком серым цветом","example":"Выберите одну из команд","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockSelect"},{"type":"object","description":"Блок radio — радиокнопки","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["radio"],"x-enum-descriptions":{"radio":"Для радиокнопок всегда radio"},"example":"radio"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора","example":"accessibility","maxLength":255},"label":{"type":"string","description":"Подпись к группе радиокнопок","example":"Доступность","maxLength":150},"options":{"type":"array","description":"Массив радиокнопок","maxItems":10,"items":{"type":"object","description":"Опция для блоков select, radio и checkbox","required":["text","value"],"properties":{"text":{"type":"string","description":"Отображаемый текст","example":"Ничего","maxLength":75},"value":{"type":"string","description":"Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта","example":"nothing","maxLength":150},"description":{"type":"string","description":"Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом","example":"Каждый день бот будет присылать список новых задач в вашей команде","maxLength":75},"selected":{"type":"boolean","description":"Изначально выбранный пункт. Только один пункт может быть выбран.","example":true}},"$ref":"#/components/schemas/ViewBlockSelectableOption"}},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под группой радиокнопок серым цветом","example":"Если вы не планируете выходить на связь, то выберите вариант Ничего","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockRadio"},{"type":"object","description":"Блок checkbox — чекбоксы","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["checkbox"],"x-enum-descriptions":{"checkbox":"Для чекбоксов всегда checkbox"},"example":"checkbox"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора","example":"newsletters","maxLength":255},"label":{"type":"string","description":"Подпись к группе чекбоксов","example":"Рассылки","maxLength":150},"options":{"type":"array","description":"Массив чекбоксов","maxItems":10,"items":{"type":"object","required":["text","value"],"properties":{"text":{"type":"string","description":"Отображаемый текст","example":"Ничего","maxLength":75},"value":{"type":"string","description":"Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта","example":"nothing","maxLength":150},"description":{"type":"string","description":"Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом","example":"Каждый день бот будет присылать список новых задач в вашей команде","maxLength":75},"checked":{"type":"boolean","description":"Изначально выбранный пункт","example":true}},"$ref":"#/components/schemas/ViewBlockCheckboxOption"}},"required":{"type":"boolean","description":"Обязательность","default":false,"example":false},"hint":{"type":"string","description":"Подсказка, которая отображается под группой чекбоксов серым цветом","example":"Выберите интересующие вас рассылки","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockCheckbox"},{"type":"object","description":"Блок date — выбор даты","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["date"],"x-enum-descriptions":{"date":"Для выбора даты всегда date"},"example":"date"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"date_start","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Дата начала отпуска","maxLength":150},"initial_date":{"type":"string","format":"date","description":"Начальное значение в поле в формате YYYY-MM-DD","example":"2025-07-01"},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Укажите дату начала отпуска","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockDate"},{"type":"object","description":"Блок time — выбор времени","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["time"],"x-enum-descriptions":{"time":"Для выбора времени всегда time"},"example":"time"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"newsletter_time","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Время рассылки","maxLength":150},"initial_time":{"type":"string","format":"time","description":"Начальное значение в поле в формате HH:mm","example":"11:00"},"required":{"type":"boolean","description":"Обязательность","default":false,"example":false},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Укажите, в какое время присылать выбранные рассылки","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockTime"},{"type":"object","description":"Блок file_input — загрузка файлов","required":["type","name","label"],"properties":{"type":{"type":"string","description":"Тип блока","enum":["file_input"],"x-enum-descriptions":{"file_input":"Для загрузки файлов всегда file_input"},"example":"file_input"},"name":{"type":"string","description":"Название, которое будет передано в ваше приложение как ключ указанного пользователем значения","example":"request_doc","maxLength":255},"label":{"type":"string","description":"Подпись к полю","example":"Заявление","maxLength":150},"filetypes":{"type":"array","description":"Массив допустимых расширений файлов, указанные в виде строк (например, [\"png\",\"jpg\",\"gif\"]). Если это поле не указано, все расширения файлов будут приняты.","example":["pdf","jpg","png"],"items":{"type":"string"}},"max_files":{"type":"integer","format":"int32","description":"Максимальное количество файлов, которое может загрузить пользователь в это поле","default":10,"example":1,"minimum":1,"maximum":10},"required":{"type":"boolean","description":"Обязательность","default":false,"example":true},"hint":{"type":"string","description":"Подсказка, которая отображается под полем серым цветом","example":"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)","maxLength":2000}},"$ref":"#/components/schemas/ViewBlockFileInput"}],"$ref":"#/components/schemas/ViewBlockUnion"}}}}},"$ref":"#/components/schemas/OpenViewRequest"}}}},"responses":{"201":{"description":"The request has succeeded and a new resource has been created as a result."},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"410":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"views:write","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Открытие представления\n\n**Метод**: `POST`\n\n**Путь**: `/views/open`\n\n> **Скоуп:** `views:write`\n\nМетод для открытия модального окна с представлением для пользователя.\n\nЧтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший `trigger_id`.\n\n## Тело запроса\n\n**Обязательно**\n\nФормат: `application/json`\n\n### Схема\n\n- `type: string` (required) — Способ открытия представления. Пример: `\"modal\"`\n Значения: `modal` — Модальное окно\n- `trigger_id: string` (required) — Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки). Пример: `\"791a056b-006c-49dd-834b-c633fde52fe8\"`\n- `private_metadata: string` (max length: 3000) — Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. Пример: `\"{\\\"timeoff_id\\\":4378}\"`\n- `callback_id: string` (max length: 255) — Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. Пример: `\"timeoff_request_form\"`\n- `view: object` (required) — Собранный объект представления\n - `title: string` (required, max length: 24) — Заголовок представления. Пример: `\"Уведомление об отпуске\"`\n - `close_text: string` (default: Отменить, max length: 24) — Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. Пример: `\"Закрыть\"`\n - `submit_text: string` (default: Отправить, max length: 24) — Текст кнопки отправки формы. Пример: `\"Отправить заявку\"`\n - `blocks: array (union)` (required, max items: 100) — Массив блоков представления\n **Возможные типы элементов:**\n\n - **ViewBlockHeader**: Блок header — заголовок\n - `type: string` (required) — Тип блока\n Значения: `header` — Для заголовков всегда header\n - `text: string` (required, max length: 150) — Текст заголовка\n - **ViewBlockPlainText**: Блок plain_text — обычный текст\n - `type: string` (required) — Тип блока\n Значения: `plain_text` — Для обычного текста всегда plain_text\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockMarkdown**: Блок markdown — форматированный текст\n - `type: string` (required) — Тип блока\n Значения: `markdown` — Для форматированного текста всегда markdown\n - `text: string` (required, max length: 12000) — Текст\n - **ViewBlockDivider**: Блок divider — разделитель\n - `type: string` (required) — Тип блока\n Значения: `divider` — Для разделителя всегда divider\n - **ViewBlockInput**: Блок input — текстовое поле ввода\n - `type: string` (required) — Тип блока\n Значения: `input` — Для текстового поля всегда input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `placeholder: string` (max length: 150) — Подсказка внутри поля ввода, пока оно пустое\n - `multiline: boolean` (default: false) — Многострочное поле\n - `initial_value: string` (max length: 3000) — Начальное значение в поле\n - `min_length: integer, int32` (min: 0, max: 3000) — Минимальная длина текста, который должен написать пользователь. Если пользователь напишет меньше, он получит ошибку.\n - `max_length: integer, int32` (min: 1, max: 3000) — Максимальная длина текста, который должен написать пользователь. Если пользователь напишет больше, он получит ошибку.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockSelect**: Блок select — выпадающий список\n - `type: string` (required) — Тип блока\n Значения: `select` — Для выпадающего списка всегда select\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к выпадающему списку\n - `options: array of object` (max items: 100) — Массив доступных пунктов в выпадающем списке\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под выпадающим списком серым цветом\n - **ViewBlockRadio**: Блок radio — радиокнопки\n - `type: string` (required) — Тип блока\n Значения: `radio` — Для радиокнопок всегда radio\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе радиокнопок\n - `options: array of object` (max items: 10) — Массив радиокнопок\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `selected: boolean` — Изначально выбранный пункт. Только один пункт может быть выбран.\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой радиокнопок серым цветом\n - **ViewBlockCheckbox**: Блок checkbox — чекбоксы\n - `type: string` (required) — Тип блока\n Значения: `checkbox` — Для чекбоксов всегда checkbox\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем выбора\n - `label: string` (required, max length: 150) — Подпись к группе чекбоксов\n - `options: array of object` (max items: 10) — Массив чекбоксов\n - `text: string` (required, max length: 75) — Отображаемый текст\n - `value: string` (required, max length: 150) — Уникальное строковое значение, которое будет передано в ваше приложение при выборе этого пункта\n - `description: string` (max length: 75) — Пояснение, которое будет указано серым цветом в этом пункте под отображаемым текстом\n - `checked: boolean` — Изначально выбранный пункт\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под группой чекбоксов серым цветом\n - **ViewBlockDate**: Блок date — выбор даты\n - `type: string` (required) — Тип блока\n Значения: `date` — Для выбора даты всегда date\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_date: date` — Начальное значение в поле в формате YYYY-MM-DD\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockTime**: Блок time — выбор времени\n - `type: string` (required) — Тип блока\n Значения: `time` — Для выбора времени всегда time\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `initial_time: string, time` — Начальное значение в поле в формате HH:mm\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n - **ViewBlockFileInput**: Блок file_input — загрузка файлов\n - `type: string` (required) — Тип блока\n Значения: `file_input` — Для загрузки файлов всегда file_input\n - `name: string` (required, max length: 255) — Название, которое будет передано в ваше приложение как ключ указанного пользователем значения\n - `label: string` (required, max length: 150) — Подпись к полю\n - `filetypes: array of string` — Массив допустимых расширений файлов, указанные в виде строк (например, [\"png\",\"jpg\",\"gif\"]). Если это поле не указано, все расширения файлов будут приняты.\n - `max_files: integer, int32` (default: 10, min: 1, max: 10) — Максимальное количество файлов, которое может загрузить пользователь в это поле\n - `required: boolean` (default: false) — Обязательность\n - `hint: string` (max length: 2000) — Подсказка, которая отображается под полем серым цветом\n\n### Пример\n\n```json\n{\n \"type\": \"modal\",\n \"trigger_id\": \"791a056b-006c-49dd-834b-c633fde52fe8\",\n \"private_metadata\": \"{\\\"timeoff_id\\\":4378}\",\n \"callback_id\": \"timeoff_request_form\",\n \"view\": {\n \"title\": \"Уведомление об отпуске\",\n \"close_text\": \"Закрыть\",\n \"submit_text\": \"Отправить заявку\",\n \"blocks\": [\n {\n \"type\": \"header\",\n \"text\": \"Основная информация\"\n },\n {\n \"type\": \"plain_text\",\n \"text\": \"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"\n },\n {\n \"type\": \"markdown\",\n \"text\": \"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"\n },\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"input\",\n \"name\": \"info\",\n \"label\": \"Описание отпуска\",\n \"placeholder\": \"Куда собираетесь и что будете делать\",\n \"multiline\": true,\n \"initial_value\": \"Начальный текст\",\n \"min_length\": 10,\n \"max_length\": 500,\n \"required\": true,\n \"hint\": \"Возможно вам подскаджут, какие места лучше посетить\"\n },\n {\n \"type\": \"select\",\n \"name\": \"team\",\n \"label\": \"Выберите команду\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"selected\": true\n }\n ],\n \"hint\": \"Выберите одну из команд\"\n },\n {\n \"type\": \"radio\",\n \"name\": \"accessibility\",\n \"label\": \"Доступность\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"selected\": true\n }\n ],\n \"required\": true,\n \"hint\": \"Если вы не планируете выходить на связь, то выберите вариант Ничего\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \"newsletters\",\n \"label\": \"Рассылки\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"checked\": true\n }\n ],\n \"hint\": \"Выберите интересующие вас рассылки\"\n },\n {\n \"type\": \"date\",\n \"name\": \"date_start\",\n \"label\": \"Дата начала отпуска\",\n \"initial_date\": \"2025-07-01\",\n \"required\": true,\n \"hint\": \"Укажите дату начала отпуска\"\n },\n {\n \"type\": \"time\",\n \"name\": \"newsletter_time\",\n \"label\": \"Время рассылки\",\n \"initial_time\": \"11:00\",\n \"hint\": \"Укажите, в какое время присылать выбранные рассылки\"\n },\n {\n \"type\": \"file_input\",\n \"name\": \"request_doc\",\n \"label\": \"Заявление\",\n \"filetypes\": [\n \"pdf\",\n \"jpg\",\n \"png\"\n ],\n \"max_files\": 1,\n \"required\": true,\n \"hint\": \"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"\n }\n ]\n }\n}\n```\n\n## Пример запроса\n\n```bash\ncurl \"https://api.pachca.com/api/shared/v1/views/open\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"type\": \"modal\",\n \"trigger_id\": \"791a056b-006c-49dd-834b-c633fde52fe8\",\n \"private_metadata\": \"{\\\"timeoff_id\\\":4378}\",\n \"callback_id\": \"timeoff_request_form\",\n \"view\": {\n \"title\": \"Уведомление об отпуске\",\n \"close_text\": \"Закрыть\",\n \"submit_text\": \"Отправить заявку\",\n \"blocks\": [\n {\n \"type\": \"header\",\n \"text\": \"Основная информация\"\n },\n {\n \"type\": \"plain_text\",\n \"text\": \"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе.\"\n },\n {\n \"type\": \"markdown\",\n \"text\": \"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)\"\n },\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"input\",\n \"name\": \"info\",\n \"label\": \"Описание отпуска\",\n \"placeholder\": \"Куда собираетесь и что будете делать\",\n \"multiline\": true,\n \"initial_value\": \"Начальный текст\",\n \"min_length\": 10,\n \"max_length\": 500,\n \"required\": true,\n \"hint\": \"Возможно вам подскаджут, какие места лучше посетить\"\n },\n {\n \"type\": \"select\",\n \"name\": \"team\",\n \"label\": \"Выберите команду\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"selected\": true\n }\n ],\n \"hint\": \"Выберите одну из команд\"\n },\n {\n \"type\": \"radio\",\n \"name\": \"accessibility\",\n \"label\": \"Доступность\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"selected\": true\n }\n ],\n \"required\": true,\n \"hint\": \"Если вы не планируете выходить на связь, то выберите вариант Ничего\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \"newsletters\",\n \"label\": \"Рассылки\",\n \"options\": [\n {\n \"text\": \"Ничего\",\n \"value\": \"nothing\",\n \"description\": \"Каждый день бот будет присылать список новых задач в вашей команде\",\n \"checked\": true\n }\n ],\n \"hint\": \"Выберите интересующие вас рассылки\"\n },\n {\n \"type\": \"date\",\n \"name\": \"date_start\",\n \"label\": \"Дата начала отпуска\",\n \"initial_date\": \"2025-07-01\",\n \"required\": true,\n \"hint\": \"Укажите дату начала отпуска\"\n },\n {\n \"type\": \"time\",\n \"name\": \"newsletter_time\",\n \"label\": \"Время рассылки\",\n \"initial_time\": \"11:00\",\n \"hint\": \"Укажите, в какое время присылать выбранные рассылки\"\n },\n {\n \"type\": \"file_input\",\n \"name\": \"request_doc\",\n \"label\": \"Заявление\",\n \"filetypes\": [\n \"pdf\",\n \"jpg\",\n \"png\"\n ],\n \"max_files\": 1,\n \"required\": true,\n \"hint\": \"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)\"\n }\n ]\n }\n}'\n```\n\n## Ответы\n\n### 201: The request has succeeded and a new resource has been created as a result.\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 410: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"GET","path":"/webhooks/events","summary":"История событий","scope":"webhooks:events:read","plan":null,"auth":true,"paginated":true,"command":"pachca bots list-events","docLink":"https://dev.pachca.com/api/bots/list-events","describe":"# GET /webhooks/events — История событий\n\n> **Скоуп:** `webhooks:events:read`\n\n> Пагинация: добавьте `--all` для автоматического обхода страниц\n\n## Параметры\n\n- `limit` — query: Количество возвращаемых сущностей за один запрос\n- `cursor` — query: Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n## Эквивалентная команда\n\n```bash\n# Добавьте --all для автоматической пагинации\npachca bots list-events \\\n --limit=1 \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/list-events\nПолная справка: `pachca api GET /webhooks/events --docs` · схема: `--spec`\n","spec":{"method":"GET","path":"/webhooks/events","description":"История событий\n\nМетод для получения истории последних событий бота. Данный метод будет полезен, если вы не можете получать события в реальном времени на ваш `URL`, но вам требуется обрабатывать все события, на которые вы подписались.\n\nИстория событий сохраняется только при активном пункте «Сохранять историю событий» во вкладке «Исходящий webhook» настроек бота. При этом указывать «Webhook `URL`» не требуется.\n\nДля получения истории событий конкретного бота вам необходимо знать его `access_token` и использовать его при запросе. Каждое событие представляет `JSON` объект вебхука.","parameters":[{"name":"limit","in":"query","description":"Количество возвращаемых сущностей за один запрос","required":false,"schema":{"type":"integer","format":"int32","default":50,"example":1,"minimum":1,"maximum":50},"example":1,"explode":false},{"name":"cursor","in":"query","description":"Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)","required":false,"schema":{"type":"string","example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9"},"example":"eyJpZCI6MTAsImRpciI6ImFzYyJ9","explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Обертка ответа с данными и пагинацией","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Событие исходящего вебхука","required":["id","event_type","payload","created_at"],"properties":{"id":{"type":"string","description":"Идентификатор события","example":"01KAJZ2XDSS2S3DSW9EXJZ0TBV"},"event_type":{"type":"string","description":"Тип события","example":"message_new"},"payload":{"description":"Объект вебхука","allOf":[{"description":"Объединение всех типов payload вебхуков","anyOf":[{"type":"object","description":"Структура исходящего вебхука о сообщении","required":["type","id","event","entity_type","entity_id","content","user_id","created_at","url","chat_id","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["message"],"x-enum-descriptions":{"message":"Для сообщений всегда message"},"example":"message"},"id":{"type":"integer","format":"int32","description":"Идентификатор сообщения","example":1245817},"event":{"description":"Тип события","example":"new","allOf":[{"type":"string","description":"Тип события webhook","enum":["new","update","delete"],"x-enum-descriptions":{"new":"Создание","update":"Обновление","delete":"Удаление"},"$ref":"#/components/schemas/WebhookEventType"}]},"entity_type":{"description":"Тип сущности, к которой относится сообщение","example":"discussion","allOf":[{"type":"string","description":"Тип сущности для сообщений","enum":["discussion","thread","user"],"x-enum-descriptions":{"discussion":"Беседа или канал","thread":"Тред","user":"Пользователь"},"$ref":"#/components/schemas/MessageEntityType"}]},"entity_id":{"type":"integer","format":"int32","description":"Идентификатор сущности, к которой относится сообщение","example":5678},"content":{"type":"string","description":"Текст сообщения","example":"Текст сообщения"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор отправителя сообщения","example":2345},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"url":{"type":"string","description":"Прямая ссылка на сообщение","example":"https://pachca.com/chats/1245817/messages/5678"},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение","example":9012},"parent_message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.","example":3456,"nullable":true},"thread":{"type":"object","description":"Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение.","nullable":true,"allOf":[{"type":"object","description":"Объект треда в вебхуке сообщения","required":["message_id","message_chat_id"],"properties":{"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому был создан тред","example":12345},"message_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому был создан тред","example":67890}},"$ref":"#/components/schemas/WebhookMessageThread"}]},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/MessageWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о реакции","required":["type","event","chat_id","message_id","code","name","user_id","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["reaction"],"x-enum-descriptions":{"reaction":"Для реакций всегда reaction"},"example":"reaction"},"event":{"description":"Тип события","example":"new","allOf":[{"type":"string","description":"Тип события webhook для реакций","enum":["new","delete"],"x-enum-descriptions":{"new":"Создание","delete":"Удаление"},"$ref":"#/components/schemas/ReactionEventType"}]},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`.","example":9012,"nullable":true},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому относится реакция","example":1245817},"code":{"type":"string","description":"Emoji символ реакции","example":"👍"},"name":{"type":"string","description":"Название реакции","example":"thumbsup"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который добавил или удалил реакцию","example":2345},"created_at":{"type":"string","format":"date-time","description":"Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции.","example":"2025-05-15T14:30:00.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/ReactionWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о нажатии кнопки","required":["type","event","message_id","trigger_id","data","user_id","chat_id","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["button"],"x-enum-descriptions":{"button":"Для кнопки всегда button"},"example":"button"},"event":{"type":"string","description":"Тип события","enum":["click"],"x-enum-descriptions":{"click":"Нажатие кнопки"},"example":"click"},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому относится кнопка","example":1245817},"trigger_id":{"type":"string","description":"Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю.","example":"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14"},"data":{"type":"string","description":"Данные нажатой кнопки","example":"button_data"},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который нажал кнопку","example":2345},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором была нажата кнопка","example":9012},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/ButtonWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о заполнении формы","required":["type","event","callback_id","private_metadata","chat_id","user_id","data","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["view"],"x-enum-descriptions":{"view":"Для формы всегда view"},"example":"view"},"event":{"type":"string","description":"Тип события","enum":["submit"],"x-enum-descriptions":{"submit":"Отправка формы"},"example":"submit"},"callback_id":{"type":"string","description":"Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан.","example":"timeoff_request_form","nullable":true},"private_metadata":{"type":"string","description":"Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны.","example":"{\"timeoff_id\":4378}","nullable":true},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.","example":9012,"nullable":true},"user_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, который отправил форму","example":1235523},"data":{"type":"object","description":"Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные.","additionalProperties":{}},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1755075544}},"$ref":"#/components/schemas/ViewSubmitWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука об участниках чата","required":["type","event","chat_id","user_ids","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["chat_member"],"x-enum-descriptions":{"chat_member":"Для участника чата всегда chat_member"},"example":"chat_member"},"event":{"description":"Тип события","example":"add","allOf":[{"type":"string","description":"Тип события webhook для участников","enum":["add","remove"],"x-enum-descriptions":{"add":"Добавление","remove":"Удаление"},"$ref":"#/components/schemas/MemberEventType"}]},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором изменился состав участников","example":9012},"thread_id":{"type":"integer","format":"int32","description":"Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред.","example":5678,"nullable":true},"user_ids":{"type":"array","description":"Массив идентификаторов пользователей, с которыми произошло событие","example":[2345,6789],"items":{"type":"integer","format":"int32"}},"created_at":{"type":"string","format":"date-time","description":"Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/ChatMemberWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука об участниках пространства","required":["type","event","user_ids","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["company_member"],"x-enum-descriptions":{"company_member":"Для участника пространства всегда company_member"},"example":"company_member"},"event":{"description":"Тип события","example":"invite","allOf":[{"type":"string","description":"Тип события webhook для пользователей","enum":["invite","confirm","update","suspend","activate","delete"],"x-enum-descriptions":{"invite":"Приглашение","confirm":"Подтверждение","update":"Обновление","suspend":"Приостановка","activate":"Активация","delete":"Удаление"},"$ref":"#/components/schemas/UserEventType"}]},"user_ids":{"type":"array","description":"Массив идентификаторов пользователей, с которыми произошло событие","example":[2345,6789],"items":{"type":"integer","format":"int32"}},"created_at":{"type":"string","format":"date-time","description":"Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/CompanyMemberWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о разворачивании ссылок","required":["type","event","chat_id","message_id","links","user_id","created_at","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["message"],"x-enum-descriptions":{"message":"Для разворачивания ссылок всегда message"},"example":"message"},"event":{"type":"string","description":"Тип события","enum":["link_shared"],"x-enum-descriptions":{"link_shared":"Обнаружена ссылка на отслеживаемый домен"},"example":"link_shared"},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором обнаружена ссылка","example":23438},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, содержащего ссылку","example":268092},"links":{"type":"array","description":"Массив обнаруженных ссылок на отслеживаемые домены","items":{"type":"object","description":"Объект ссылки в вебхуке разворачивания ссылок","required":["url","domain","skip"],"properties":{"url":{"type":"string","description":"URL ссылки","example":"https://example.com/page1"},"domain":{"type":"string","description":"Домен ссылки","example":"example.com"},"skip":{"type":"boolean","description":"Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью.","example":false}},"$ref":"#/components/schemas/WebhookLink"}},"user_id":{"type":"integer","format":"int32","description":"Идентификатор отправителя сообщения","example":2345},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2024-09-18T19:53:14.000Z"},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1726685594}},"$ref":"#/components/schemas/LinkSharedWebhookPayload"},{"type":"object","description":"Структура исходящего вебхука о видеозвонке","required":["type","event","video_room_id","chat_id","owner_id","webhook_timestamp"],"properties":{"type":{"type":"string","description":"Тип объекта","enum":["video_call"],"x-enum-descriptions":{"video_call":"Для видеозвонков всегда video_call"},"example":"video_call"},"event":{"description":"Тип события","example":"started","allOf":[{"type":"string","description":"Тип события видеозвонка","enum":["started","finished","recording_ready"],"x-enum-descriptions":{"started":"Видеозвонок начался","finished":"Видеозвонок завершился","recording_ready":"Запись видеозвонка готова"},"$ref":"#/components/schemas/VideoCallEventType"}]},"video_room_id":{"type":"integer","format":"int32","description":"Идентификатор видеозвонка","example":9012},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата, в котором проходит видеозвонок","example":23438},"owner_id":{"type":"integer","format":"int32","description":"Идентификатор пользователя, начавшего видеозвонок","example":2345},"thread":{"type":"object","description":"Объект с параметрами треда, если видеозвонок проходит в треде. `null`, если звонок не в треде.","nullable":true,"allOf":[{"type":"object","description":"Параметры треда, в котором проходит видеозвонок","required":["id","chat_id","message_id","message_chat_id"],"properties":{"id":{"type":"integer","format":"int32","description":"Идентификатор треда","example":12345},"chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата треда","example":67890},"message_id":{"type":"integer","format":"int32","description":"Идентификатор сообщения, к которому создан тред","example":268092},"message_chat_id":{"type":"integer","format":"int32","description":"Идентификатор чата сообщения, к которому создан тред","example":23438}},"$ref":"#/components/schemas/WebhookVideoCallThread"}]},"started_at":{"type":"string","format":"date-time","description":"Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished.","example":"2025-05-15T14:30:00.000Z"},"finished_at":{"type":"string","format":"date-time","description":"Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished.","example":"2025-05-15T14:45:00.000Z"},"duration":{"type":"integer","format":"int32","description":"Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи.","example":900},"members":{"type":"array","description":"Список участников звонка. Присутствует для события finished.","items":{"type":"object","description":"Участник видеозвонка","required":["user_id","joined_at","left_at"],"properties":{"user_id":{"type":"integer","format":"int32","description":"Идентификатор участника","example":2345},"joined_at":{"type":"string","format":"date-time","description":"Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"},"left_at":{"type":"string","format":"date-time","description":"Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка.","example":"2025-05-15T14:45:00.000Z"}},"$ref":"#/components/schemas/WebhookVideoCallMember"}},"recording_id":{"type":"integer","format":"int32","description":"Идентификатор записи. Присутствует для события recording_ready.","example":4567},"file_id":{"type":"integer","format":"int32","description":"Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан.","example":89012,"nullable":true},"url":{"type":"string","description":"Прямая ссылка на файл записи. Присутствует для события recording_ready.","example":"https://api.pachca.com/files/89012"},"size":{"type":"integer","format":"int32","description":"Размер файла записи в байтах. Присутствует для события recording_ready.","example":10485760},"webhook_timestamp":{"type":"integer","format":"int32","description":"Дата и время отправки вебхука (UTC+0) в формате UNIX","example":1747574400}},"$ref":"#/components/schemas/VideoCallWebhookPayload"}],"$ref":"#/components/schemas/WebhookPayloadUnion"}]},"created_at":{"type":"string","format":"date-time","description":"Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ","example":"2025-05-15T14:30:00.000Z"}},"$ref":"#/components/schemas/WebhookEvent"}},"meta":{"type":"object","description":"Метаданные пагинации","required":["paginate"],"properties":{"paginate":{"type":"object","description":"Вспомогательная информация","required":["next_page"],"properties":{"next_page":{"type":"string","description":"Курсор пагинации следующей страницы","example":"eyJxZCO2MiwiZGlyIjomSNYjIn3"},"prev_page":{"type":"string","description":"Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка.","example":"eyJxZCO2MiwiZGlyIjoiYXNjIn0"},"has_next":{"type":"boolean","description":"Есть ли ещё данные на следующей странице. На последней странице — `false`.","example":true},"has_prev":{"type":"boolean","description":"Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`.","example":false}}}},"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"webhooks:events:read","scopeRoles":["owner","admin","user","bot"]},"paginated":true},"docs":"# История событий\n\n**Метод**: `GET`\n\n**Путь**: `/webhooks/events`\n\n> **Скоуп:** `webhooks:events:read`\n\nМетод для получения истории последних событий бота. Данный метод будет полезен, если вы не можете получать события в реальном времени на ваш `URL`, но вам требуется обрабатывать все события, на которые вы подписались.\n\nИстория событий сохраняется только при активном пункте «Сохранять историю событий» во вкладке «Исходящий webhook» настроек бота. При этом указывать «Webhook `URL`» не требуется.\n\nДля получения истории событий конкретного бота вам необходимо знать его `access_token` и использовать его при запросе. Каждое событие представляет `JSON` объект вебхука.\n\n## Параметры\n\n### Query параметры\n\n- `limit: integer, int32` (default: 50) — Количество возвращаемых сущностей за один запрос\n- `cursor: string` — Курсор для пагинации (из `meta.paginate.next_page` или `meta.paginate.prev_page`)\n\n\n## Пример запроса\n\n```bash\n# Для получения следующей страницы используйте cursor из meta.paginate.next_page\ncurl \"https://api.pachca.com/api/shared/v1/webhooks/events?limit=1\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 200: The request has succeeded.\n\n**Схема ответа:**\n\n- `data: array of object` (required)\n - `id: string` (required) — Идентификатор события. Пример: `\"01KAJZ2XDSS2S3DSW9EXJZ0TBV\"`\n - `event_type: string` (required) — Тип события. Пример: `\"message_new\"`\n - `payload: anyOf` (required) — Объект вебхука\n **Возможные варианты:**\n\n - **MessageWebhookPayload**: Структура исходящего вебхука о сообщении\n - `type: string` (required) — Тип объекта. Пример: `\"message\"`\n Значения: `message` — Для сообщений всегда message\n - `id: integer, int32` (required) — Идентификатор сообщения. Пример: `1245817`\n - `event: string` (required) — Тип события\n Значения: `new` — Создание, `update` — Обновление, `delete` — Удаление\n - `entity_type: string` (required) — Тип сущности, к которой относится сообщение\n Значения: `discussion` — Беседа или канал, `thread` — Тред, `user` — Пользователь\n - `entity_id: integer, int32` (required) — Идентификатор сущности, к которой относится сообщение. Пример: `5678`\n - `content: string` (required) — Текст сообщения. Пример: `\"Текст сообщения\"`\n - `user_id: integer, int32` (required) — Идентификатор отправителя сообщения. Пример: `2345`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `url: string` (required) — Прямая ссылка на сообщение. Пример: `\"https://pachca.com/chats/1245817/messages/5678\"`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором находится сообщение. Пример: `9012`\n - `parent_message_id: integer, int32` (nullable) — Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. Пример: `3456`\n - `thread: object` — Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение.\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому был создан тред. Пример: `12345`\n - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому был создан тред. Пример: `67890`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **ReactionWebhookPayload**: Структура исходящего вебхука о реакции\n - `type: string` (required) — Тип объекта. Пример: `\"reaction\"`\n Значения: `reaction` — Для реакций всегда reaction\n - `event: string` (required) — Тип события\n Значения: `new` — Создание, `delete` — Удаление\n - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором находится сообщение. Поле всегда присутствует в payload. В редких случаях (например, если сообщение было удалено к моменту отправки вебхука) может быть `null`. Пример: `9012`\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится реакция. Пример: `1245817`\n - `code: string` (required) — Emoji символ реакции. Пример: `\"👍\"`\n - `name: string` (required) — Название реакции. Пример: `\"thumbsup\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который добавил или удалил реакцию. Пример: `2345`\n - `created_at: date-time` (required) — Дата и время добавления реакции (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Поле присутствует и для события удаления реакции. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **ButtonWebhookPayload**: Структура исходящего вебхука о нажатии кнопки\n - `type: string` (required) — Тип объекта. Пример: `\"button\"`\n Значения: `button` — Для кнопки всегда button\n - `event: string` (required) — Тип события. Пример: `\"click\"`\n Значения: `click` — Нажатие кнопки\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому относится кнопка. Пример: `1245817`\n - `trigger_id: string` (required) — Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю. Пример: `\"a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14\"`\n - `data: string` (required) — Данные нажатой кнопки. Пример: `\"button_data\"`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который нажал кнопку. Пример: `2345`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором была нажата кнопка. Пример: `9012`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **ViewSubmitWebhookPayload**: Структура исходящего вебхука о заполнении формы\n - `type: string` (required) — Тип объекта. Пример: `\"view\"`\n Значения: `view` — Для формы всегда view\n - `event: string` (required) — Тип события. Пример: `\"submit\"`\n Значения: `submit` — Отправка формы\n - `callback_id: string` (required, nullable) — Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. Пример: `\"timeoff_request_form\"`\n - `private_metadata: string` (required, nullable) — Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. Пример: `\"{\\\"timeoff_id\\\":4378}\"`\n - `chat_id: integer, int32` (required, nullable) — Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля. Пример: `9012`\n - `user_id: integer, int32` (required) — Идентификатор пользователя, который отправил форму. Пример: `1235523`\n - `data: Record` (required) — Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные.\n **Структура значений Record:**\n - Тип значения: `any`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1755075544`\n - **ChatMemberWebhookPayload**: Структура исходящего вебхука об участниках чата\n - `type: string` (required) — Тип объекта. Пример: `\"chat_member\"`\n Значения: `chat_member` — Для участника чата всегда chat_member\n - `event: string` (required) — Тип события\n Значения: `add` — Добавление, `remove` — Удаление\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором изменился состав участников. Пример: `9012`\n - `thread_id: integer, int32` (nullable) — Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. Пример: `5678`\n - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]`\n - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **CompanyMemberWebhookPayload**: Структура исходящего вебхука об участниках пространства\n - `type: string` (required) — Тип объекта. Пример: `\"company_member\"`\n Значения: `company_member` — Для участника пространства всегда company_member\n - `event: string` (required) — Тип события\n Значения: `invite` — Приглашение, `confirm` — Подтверждение, `update` — Обновление, `suspend` — Приостановка, `activate` — Активация, `delete` — Удаление\n - `user_ids: array of integer` (required) — Массив идентификаторов пользователей, с которыми произошло событие. Пример: `[2345,6789]`\n - `created_at: date-time` (required) — Дата и время события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - **LinkSharedWebhookPayload**: Структура исходящего вебхука о разворачивании ссылок\n - `type: string` (required) — Тип объекта. Пример: `\"message\"`\n Значения: `message` — Для разворачивания ссылок всегда message\n - `event: string` (required) — Тип события. Пример: `\"link_shared\"`\n Значения: `link_shared` — Обнаружена ссылка на отслеживаемый домен\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором обнаружена ссылка. Пример: `23438`\n - `message_id: integer, int32` (required) — Идентификатор сообщения, содержащего ссылку. Пример: `268092`\n - `links: array of object` (required) — Массив обнаруженных ссылок на отслеживаемые домены\n - `url: string` (required) — URL ссылки. Пример: `\"https://example.com/page1\"`\n - `domain: string` (required) — Домен ссылки. Пример: `\"example.com\"`\n - `skip: boolean` (required) — Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью. Пример: `false`\n - `user_id: integer, int32` (required) — Идентификатор отправителя сообщения. Пример: `2345`\n - `created_at: date-time` (required) — Дата и время создания сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2024-09-18T19:53:14.000Z\"`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1726685594`\n - **VideoCallWebhookPayload**: Структура исходящего вебхука о видеозвонке\n - `type: string` (required) — Тип объекта. Пример: `\"video_call\"`\n Значения: `video_call` — Для видеозвонков всегда video_call\n - `event: string` (required) — Тип события\n Значения: `started` — Видеозвонок начался, `finished` — Видеозвонок завершился, `recording_ready` — Запись видеозвонка готова\n - `video_room_id: integer, int32` (required) — Идентификатор видеозвонка. Пример: `9012`\n - `chat_id: integer, int32` (required) — Идентификатор чата, в котором проходит видеозвонок. Пример: `23438`\n - `owner_id: integer, int32` (required) — Идентификатор пользователя, начавшего видеозвонок. Пример: `2345`\n - `thread: object` — Объект с параметрами треда, если видеозвонок проходит в треде. `null`, если звонок не в треде.\n - `id: integer, int32` (required) — Идентификатор треда. Пример: `12345`\n - `chat_id: integer, int32` (required) — Идентификатор чата треда. Пример: `67890`\n - `message_id: integer, int32` (required) — Идентификатор сообщения, к которому создан тред. Пример: `268092`\n - `message_chat_id: integer, int32` (required) — Идентификатор чата сообщения, к которому создан тред. Пример: `23438`\n - `started_at: date-time` — Дата и время начала звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для событий started и finished. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `finished_at: date-time` — Дата и время завершения звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Присутствует для события finished. Пример: `\"2025-05-15T14:45:00.000Z\"`\n - `duration: integer, int32` — Длительность в секундах. Для события finished — длительность звонка, для recording_ready — длительность записи. Пример: `900`\n - `members: array of object` — Список участников звонка. Присутствует для события finished.\n - `user_id: integer, int32` (required) — Идентификатор участника. Пример: `2345`\n - `joined_at: date-time` (required) — Дата и время первого подключения к звонку (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n - `left_at: date-time` (required) — Дата и время выхода из звонка (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Если участник оставался в звонке до его завершения, совпадает с временем окончания звонка. Пример: `\"2025-05-15T14:45:00.000Z\"`\n - `recording_id: integer, int32` — Идентификатор записи. Присутствует для события recording_ready. Пример: `4567`\n - `file_id: integer, int32` (nullable) — Идентификатор файла записи. Присутствует для события recording_ready. `null`, если файл ещё не привязан. Пример: `89012`\n - `url: string` — Прямая ссылка на файл записи. Присутствует для события recording_ready. Пример: `\"https://api.pachca.com/files/89012\"`\n - `size: integer, int32` — Размер файла записи в байтах. Присутствует для события recording_ready. Пример: `10485760`\n - `webhook_timestamp: integer, int32` (required) — Дата и время отправки вебхука (UTC+0) в формате UNIX. Пример: `1747574400`\n - `created_at: date-time` (required) — Дата и время создания события (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. Пример: `\"2025-05-15T14:30:00.000Z\"`\n- `meta: object` (required) — Метаданные пагинации\n - `paginate: object` (required) — Вспомогательная информация\n - `next_page: string` (required) — Курсор пагинации следующей страницы. Пример: `\"eyJxZCO2MiwiZGlyIjomSNYjIn3\"`\n - `prev_page: string` — Курсор пагинации предыдущей страницы. Используется для polling новых записей «сверху» списка. Пример: `\"eyJxZCO2MiwiZGlyIjoiYXNjIn0\"`\n - `has_next: boolean` — Есть ли ещё данные на следующей странице. На последней странице — `false`. Пример: `true`\n - `has_prev: boolean` — Есть ли ещё данные на предыдущей странице. На первом запросе без курсора — `false`. Пример: `false`\n\n**Пример ответа:**\n\n```json\n{\n \"data\": [\n {\n \"id\": \"01KAJZ2XDSS2S3DSW9EXJZ0TBV\",\n \"event_type\": \"message_new\",\n \"payload\": {\n \"type\": \"message\",\n \"id\": 1245817,\n \"event\": \"new\",\n \"entity_type\": \"discussion\",\n \"entity_id\": 5678,\n \"content\": \"Текст сообщения\",\n \"user_id\": 2345,\n \"created_at\": \"2025-05-15T14:30:00.000Z\",\n \"url\": \"https://pachca.com/chats/1245817/messages/5678\",\n \"chat_id\": 9012,\n \"parent_message_id\": 3456,\n \"thread\": {\n \"message_id\": 12345,\n \"message_chat_id\": 67890\n },\n \"webhook_timestamp\": 1747574400\n },\n \"created_at\": \"2025-05-15T14:30:00.000Z\"\n }\n ],\n \"meta\": {\n \"paginate\": {\n \"next_page\": \"eyJxZCO2MiwiZGlyIjomSNYjIn3\",\n \"prev_page\": \"eyJxZCO2MiwiZGlyIjoiYXNjIn0\",\n \"has_next\": true,\n \"has_prev\": false\n }\n }\n}\n```\n\n### 400: The server could not understand the request due to invalid syntax.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 422: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"},{"method":"DELETE","path":"/webhooks/events/{id}","summary":"Удаление события","scope":"webhooks:events:delete","plan":null,"auth":true,"paginated":false,"command":"pachca bots remove-event","docLink":"https://dev.pachca.com/api/bots/remove-event","describe":"# DELETE /webhooks/events/{id} — Удаление события\n\n> **Скоуп:** `webhooks:events:delete`\n\n## Параметры\n\n- `id` — путь (обязательный): Идентификатор события\n\n## Эквивалентная команда\n\n```bash\npachca bots remove-event 01KAJZ2XDSS2S3DSW9EXJZ0TBV \\\n --json \\\n --token YOUR_ACCESS_TOKEN\n```\n\nДокументация: https://dev.pachca.com/api/bots/remove-event\nПолная справка: `pachca api DELETE /webhooks/events/{id} --docs` · схема: `--spec`\n","spec":{"method":"DELETE","path":"/webhooks/events/{id}","description":"Удаление события\n\nДанный метод доступен для работы только с `access_token` бота\n\nМетод для удаления события из истории событий бота.\n\nДля удаления события вам необходимо знать `access_token` бота, которому принадлежит событие, и `id` события.","parameters":[{"name":"id","in":"path","description":"Идентификатор события","required":true,"schema":{"type":"string","example":"01KAJZ2XDSS2S3DSW9EXJZ0TBV"},"example":"01KAJZ2XDSS2S3DSW9EXJZ0TBV"}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. "},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"402":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка OAuth авторизации (используется для 401 и 403)","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Код ошибки","example":"invalid_token"},"error_description":{"type":"string","description":"Описание ошибки","example":"Access token is missing"}},"$ref":"#/components/schemas/OAuthError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"Ошибка API (используется для 400, 402, 403, 404, 409, 410, 422)","required":["errors"],"properties":{"errors":{"type":"array","description":"Массив ошибок","items":{"type":"object","description":"Детальная информация об ошибке","required":["key","value","message","code","payload"],"properties":{"key":{"type":"string","description":"Ключ поля с ошибкой","example":"field.name"},"value":{"type":"string","description":"Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.","example":"invalid_value","nullable":true},"message":{"type":"string","description":"Сообщение об ошибке","example":"Поле не может быть пустым"},"code":{"description":"Код ошибки","example":"blank","allOf":[{"type":"string","description":"Коды ошибок валидации","enum":["blank","too_long","invalid","inclusion","exclusion","taken","wrong_emoji","not_found","already_exists","personal_chat","displayed_error","not_authorized","invalid_date_range","invalid_webhook_url","rate_limit","licenses_limit","user_limit","unique_limit","general_limit","unhandled","trigger_not_found","trigger_expired","required","in","not_applicable","self_update","owner_protected","already_assigned","forbidden","permission_denied","access_denied","wrong_params","payment_required","min_length","max_length","use_of_system_words","export_file_not_found","cannot_kick_owner","pin_failed","message_deleted","thread_message"],"x-enum-descriptions":{"blank":"Обязательное поле (не может быть пустым)","too_long":"Слишком длинное значение (пояснения вы получите в поле message)","invalid":"Поле не соответствует правилам (пояснения вы получите в поле message)","inclusion":"Поле имеет непредусмотренное значение","exclusion":"Поле имеет недопустимое значение","taken":"Название для этого поля уже существует","wrong_emoji":"Emoji статуса не может содержать значения отличные от Emoji символа","not_found":"Объект не найден","already_exists":"Объект уже существует (пояснения вы получите в поле message)","personal_chat":"Ошибка личного чата (пояснения вы получите в поле message)","displayed_error":"Отображаемая ошибка (пояснения вы получите в поле message)","not_authorized":"Действие запрещено","invalid_date_range":"Выбран слишком большой диапазон дат","invalid_webhook_url":"Некорректный URL вебхука","rate_limit":"Достигнут лимит запросов","licenses_limit":"Превышен лимит активных сотрудников (пояснения вы получите в поле message)","user_limit":"Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций)","unique_limit":"Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций)","general_limit":"Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций)","unhandled":"Ошибка выполнения запроса (пояснения вы получите в поле message)","trigger_not_found":"Не удалось найти идентификатор события","trigger_expired":"Время жизни идентификатора события истекло","required":"Обязательный параметр не передан","in":"Недопустимое значение (не входит в список допустимых)","not_applicable":"Значение неприменимо в данном контексте (пояснения вы получите в поле message)","self_update":"Нельзя изменить свои собственные данные","owner_protected":"Нельзя изменить данные владельца","already_assigned":"Значение уже назначено","forbidden":"Недостаточно прав для выполнения действия (пояснения вы получите в поле message)","permission_denied":"Доступ запрещён (недостаточно прав)","access_denied":"Доступ запрещён","wrong_params":"Некорректные параметры запроса (пояснения вы получите в поле message)","payment_required":"Требуется оплата","min_length":"Значение слишком короткое (пояснения вы получите в поле message)","max_length":"Значение слишком длинное (пояснения вы получите в поле message)","use_of_system_words":"Использовано зарезервированное системное слово (here, all)","export_file_not_found":"Файл экспорта не найден или ещё не готов","cannot_kick_owner":"Нельзя исключить владельца чата","pin_failed":"Не удалось закрепить сообщение","message_deleted":"Сообщение удалено","thread_message":"Нельзя создать тред для сообщения, которое уже находится в треде"},"$ref":"#/components/schemas/ValidationErrorCode"}]},"payload":{"type":"object","description":"Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.","example":null,"nullable":true,"additionalProperties":{}}},"$ref":"#/components/schemas/ApiErrorItem"}}},"$ref":"#/components/schemas/ApiError"}}}}},"requirements":{"scope":"webhooks:events:delete","scopeRoles":["owner","admin","user","bot"]},"paginated":false},"docs":"# Удаление события\n\n**Метод**: `DELETE`\n\n**Путь**: `/webhooks/events/{id}`\n\n> **Скоуп:** `webhooks:events:delete`\n\nДанный метод доступен для работы только с `access_token` бота\n\nМетод для удаления события из истории событий бота.\n\nДля удаления события вам необходимо знать `access_token` бота, которому принадлежит событие, и `id` события.\n\n## Параметры\n\n### Path параметры\n\n- `id: string` (required) — Идентификатор события\n\n\n## Пример запроса\n\n```bash\ncurl -X DELETE \"https://api.pachca.com/api/shared/v1/webhooks/events/01KAJZ2XDSS2S3DSW9EXJZ0TBV\" \\\n -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n```\n\n## Ответы\n\n### 204: There is no content to send for this request, but the headers may be useful. \n\n### 401: Access is unauthorized.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 402: Client error\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n### 403: Access is forbidden.\n\n**Схема ответа при ошибке:**\n\n- `error: string` (required) — Код ошибки. Пример: `\"invalid_token\"`\n- `error_description: string` (required) — Описание ошибки. Пример: `\"Access token is missing\"`\n\n**Пример ответа:**\n\n```json\n{\n \"error\": \"invalid_token\",\n \"error_description\": \"Access token is missing\"\n}\n```\n\n### 404: The server cannot find the requested resource.\n\n**Схема ответа при ошибке:**\n\n- `errors: array of object` (required) — Массив ошибок\n - `key: string` (required) — Ключ поля с ошибкой. Пример: `\"field.name\"`\n - `value: string` (required, nullable) — Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. Пример: `\"invalid_value\"`\n - `message: string` (required) — Сообщение об ошибке. Пример: `\"Поле не может быть пустым\"`\n - `code: string` (required) — Код ошибки\n Значения: `blank` — Обязательное поле (не может быть пустым), `too_long` — Слишком длинное значение (пояснения вы получите в поле message), `invalid` — Поле не соответствует правилам (пояснения вы получите в поле message), `inclusion` — Поле имеет непредусмотренное значение, `exclusion` — Поле имеет недопустимое значение, `taken` — Название для этого поля уже существует, `wrong_emoji` — Emoji статуса не может содержать значения отличные от Emoji символа, `not_found` — Объект не найден, `already_exists` — Объект уже существует (пояснения вы получите в поле message), `personal_chat` — Ошибка личного чата (пояснения вы получите в поле message), `displayed_error` — Отображаемая ошибка (пояснения вы получите в поле message), `not_authorized` — Действие запрещено, `invalid_date_range` — Выбран слишком большой диапазон дат, `invalid_webhook_url` — Некорректный URL вебхука, `rate_limit` — Достигнут лимит запросов, `licenses_limit` — Превышен лимит активных сотрудников (пояснения вы получите в поле message), `user_limit` — Превышен лимит количества реакций, которые может добавить пользователь (20 уникальных реакций), `unique_limit` — Превышен лимит количества уникальных реакций, которые можно добавить на сообщение (30 уникальных реакций), `general_limit` — Превышен лимит количества реакций, которые можно добавить на сообщение (1000 реакций), `unhandled` — Ошибка выполнения запроса (пояснения вы получите в поле message), `trigger_not_found` — Не удалось найти идентификатор события, `trigger_expired` — Время жизни идентификатора события истекло, `required` — Обязательный параметр не передан, `in` — Недопустимое значение (не входит в список допустимых), `not_applicable` — Значение неприменимо в данном контексте (пояснения вы получите в поле message), `self_update` — Нельзя изменить свои собственные данные, `owner_protected` — Нельзя изменить данные владельца, `already_assigned` — Значение уже назначено, `forbidden` — Недостаточно прав для выполнения действия (пояснения вы получите в поле message), `permission_denied` — Доступ запрещён (недостаточно прав), `access_denied` — Доступ запрещён, `wrong_params` — Некорректные параметры запроса (пояснения вы получите в поле message), `payment_required` — Требуется оплата, `min_length` — Значение слишком короткое (пояснения вы получите в поле message), `max_length` — Значение слишком длинное (пояснения вы получите в поле message), `use_of_system_words` — Использовано зарезервированное системное слово (here, all), `export_file_not_found` — Файл экспорта не найден или ещё не готов, `cannot_kick_owner` — Нельзя исключить владельца чата, `pin_failed` — Не удалось закрепить сообщение, `message_deleted` — Сообщение удалено, `thread_message` — Нельзя создать тред для сообщения, которое уже находится в треде\n - `payload: Record` (required, nullable) — Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`. Пример: `null`\n **Структура значений Record:**\n - Тип значения: `any`\n\n**Пример ответа:**\n\n```json\n{\n \"errors\": [\n {\n \"key\": \"field.name\",\n \"value\": \"invalid_value\",\n \"message\": \"Поле не может быть пустым\",\n \"code\": \"blank\",\n \"payload\": null\n }\n ]\n}\n```\n\n"}] \ No newline at end of file diff --git a/packages/cli/src/data/workflows.json b/packages/cli/src/data/workflows.json index de9b0b3cb..55e926974 100644 --- a/packages/cli/src/data/workflows.json +++ b/packages/cli/src/data/workflows.json @@ -45,7 +45,7 @@ "steps": [ { "description": "Получи или создай тред, возьми `thread.id` из ответа", - "command": "pachca thread add ", + "command": "pachca threads add ", "notes": "Если тред уже существует, вернётся существующий" }, { @@ -140,7 +140,7 @@ "steps": [ { "description": "Получи или создай тред, возьми `chat_id` из ответа", - "command": "pachca thread add " + "command": "pachca threads add " }, { "description": "Добавь бота в участники чата треда", diff --git a/packages/cli/src/output.ts b/packages/cli/src/output.ts index 8760a6133..c47090d52 100644 --- a/packages/cli/src/output.ts +++ b/packages/cli/src/output.ts @@ -64,8 +64,16 @@ function outputCsv(data: unknown, opts: OutputOptions): void { const row = columns.map((col) => { const val = (item as Record)[col]; if (val == null) return ''; - const str = String(val); - if (str.includes(',') || str.includes('"') || str.includes('\n')) { + // Objects/arrays as JSON, matching outputPlain and outputTable — + // String() rendered them as "[object Object]" and lost the structure. + const str = typeof val === 'object' ? JSON.stringify(val) : String(val); + // A cell starting with =, +, - or @ is executed as a formula by Excel, + // Sheets and LibreOffice. Values here are user-authored (message text, + // names), so prefix a quote to neutralise it. + if (/^[=+\-@\t\r]/.test(str)) { + return `"'${str.replace(/"/g, '""')}"`; + } + if (/[",\n\r]/.test(str)) { return `"${str.replace(/"/g, '""')}"`; } return str; diff --git a/packages/cli/src/profiles.ts b/packages/cli/src/profiles.ts index 10a90a3a1..7accc3e74 100644 --- a/packages/cli/src/profiles.ts +++ b/packages/cli/src/profiles.ts @@ -181,7 +181,11 @@ export function setConfigValue(key: string, value: string): void { /** * Resolve the token to use, respecting priority: - * --token > PACHCA_TOKEN env > --profile/PACHCA_PROFILE > active profile > error + * --token > --profile > PACHCA_TOKEN env > PACHCA_PROFILE env > active profile > error + * + * Explicit flags beat ambient environment. An exported PACHCA_TOKEN (common in + * CI and agent shells) used to win over an explicit `--profile staging`, so the + * command silently wrote to the wrong workspace with the wrong token. */ export function resolveToken(flags: { token?: string; @@ -192,8 +196,8 @@ export function resolveToken(flags: { return { token: flags.token }; } - // 2. PACHCA_TOKEN env - if (process.env.PACHCA_TOKEN) { + // 2. PACHCA_TOKEN env — unless a profile was named explicitly + if (!flags.profile && process.env.PACHCA_TOKEN) { return { token: process.env.PACHCA_TOKEN }; } diff --git a/packages/cli/tests/client.test.ts b/packages/cli/tests/client.test.ts index 8b292e4b6..43634718c 100644 --- a/packages/cli/tests/client.test.ts +++ b/packages/cli/tests/client.test.ts @@ -160,6 +160,57 @@ describe('client', () => { expect(callCount).toBe(3); }); + it('should NOT retry a POST on 503 (the write may already be committed)', async () => { + let callCount = 0; + globalThis.fetch = vi.fn().mockImplementation(() => { + callCount++; + return Promise.resolve({ + ok: false, + status: 503, + statusText: 'Service Unavailable', + headers: new Headers({ 'content-type': 'application/json' }), + json: () => Promise.resolve({ errors: [{ message: 'Unavailable' }] }), + }); + }); + + await expect( + request( + { method: 'POST', path: '/messages', token: 'test', body: { content: 'hi' } }, + { quiet: true }, + ), + ).rejects.toThrow(); + expect(callCount).toBe(1); + }); + + it('should still retry a POST on 429 (request was rejected, not committed)', async () => { + let callCount = 0; + globalThis.fetch = vi.fn().mockImplementation(() => { + callCount++; + if (callCount === 1) { + return Promise.resolve({ + ok: false, + status: 429, + statusText: 'Too Many Requests', + headers: new Headers({ 'content-type': 'application/json', 'retry-after': '0' }), + json: () => Promise.resolve({ errors: [{ message: 'Rate limited' }] }), + }); + } + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ 'content-type': 'application/json' }), + json: () => Promise.resolve({ data: 'created' }), + }); + }); + + const result = await request( + { method: 'POST', path: '/messages', token: 'test', body: { content: 'hi' } }, + { quiet: true }, + ); + expect(result.data).toEqual({ data: 'created' }); + expect(callCount).toBe(2); + }); + it('should not retry on 400 errors', async () => { let callCount = 0; globalThis.fetch = vi.fn().mockImplementation(() => { @@ -863,6 +914,22 @@ describe('client', () => { expect(fs.existsSync(path.join(tmpDir, 'export.csv'))).toBe(true); }); + it('should not escape the target directory via Content-Disposition', async () => { + const content = Buffer.from('data'); + globalThis.fetch = vi.fn().mockResolvedValue({ + ok: true, + status: 200, + headers: new Headers({ + 'content-disposition': 'attachment; filename="../../escaped.txt"', + }), + body: mockStream(content), + }); + + await downloadFile('https://example.com/download', tmpDir + '/'); + expect(fs.existsSync(path.join(tmpDir, 'escaped.txt'))).toBe(true); + expect(fs.existsSync(path.resolve(tmpDir, '../../escaped.txt'))).toBe(false); + }); + it('should throw on failed download', async () => { globalThis.fetch = vi.fn().mockResolvedValue({ ok: false, diff --git a/packages/cli/tests/output.test.ts b/packages/cli/tests/output.test.ts index cffc0d54e..d08071e20 100644 --- a/packages/cli/tests/output.test.ts +++ b/packages/cli/tests/output.test.ts @@ -95,6 +95,22 @@ describe('output', () => { const calls = stdoutWrite.mock.calls.map((c: unknown[]) => c[0]); expect(calls[1]).toBe('"Line 1\nLine 2"\n'); }); + + it('should neutralize formula-injection cells', () => { + // Message text is user-authored: a leading =/+/-/@ must not reach Excel + // or Sheets as a live formula. + const data = [{ content: '=HYPERLINK("http://evil","click")' }]; + outputData(data, { format: 'csv', quiet: false }); + const calls = stdoutWrite.mock.calls.map((c: unknown[]) => c[0]); + expect(calls[1]).toBe('"\'=HYPERLINK(""http://evil"",""click"")"\n'); + }); + + it('should render object and array values as JSON', () => { + const data = [{ tags: [1, 2], meta: { a: 1 } }]; + outputData(data, { format: 'csv', quiet: false }); + const calls = stdoutWrite.mock.calls.map((c: unknown[]) => c[0]); + expect(calls[1]).toBe('"[1,2]","{""a"":1}"\n'); + }); }); describe('table', () => { diff --git a/packages/cli/tests/profiles.test.ts b/packages/cli/tests/profiles.test.ts index 119c076a0..ea3537fe5 100644 --- a/packages/cli/tests/profiles.test.ts +++ b/packages/cli/tests/profiles.test.ts @@ -131,7 +131,7 @@ describe('profiles', () => { expect(result.profileName).toBeUndefined(); }); - it('should prioritize PACHCA_TOKEN env over profile', async () => { + it('should prioritize PACHCA_TOKEN env over the active profile', async () => { const { setProfile, setActiveProfile, resolveToken } = await import('../src/profiles.js'); process.env.PACHCA_TOKEN = 'from-env'; setProfile('default', { type: 'user', token: 'from-profile', user: 'U', scopes: [] }); @@ -142,6 +142,19 @@ describe('profiles', () => { expect(result.profileName).toBeUndefined(); }); + it('should prioritize an explicit --profile over PACHCA_TOKEN env', async () => { + const { setProfile, setActiveProfile, resolveToken } = await import('../src/profiles.js'); + // An exported PACHCA_TOKEN must not hijack a command that names its profile — + // that silently wrote to the wrong workspace in CI and agent shells. + process.env.PACHCA_TOKEN = 'prod-token-from-env'; + setProfile('staging', { type: 'user', token: 'staging-token', user: 'S', scopes: [] }); + setActiveProfile('staging'); + + const result = resolveToken({ profile: 'staging' }); + expect(result.token).toBe('staging-token'); + expect(result.profileName).toBe('staging'); + }); + it('should use PACHCA_PROFILE env to select profile', async () => { const { setProfile, setActiveProfile, resolveToken } = await import('../src/profiles.js'); setProfile('personal', { type: 'user', token: 'personal-token', user: 'Personal', scopes: [] }); diff --git a/packages/generator/src/ir.ts b/packages/generator/src/ir.ts index 6baf24c84..dbea97b60 100644 --- a/packages/generator/src/ir.ts +++ b/packages/generator/src/ir.ts @@ -73,8 +73,12 @@ export interface IRUnion { name: string; /** Referenced type names */ memberRefs: string[]; - /** Discriminator field name detected from literal fields (e.g. "type", "entity_type") */ - discriminatorField: string; + /** + * Discriminator field name detected from literal fields (e.g. "type", + * "entity_type"). Undefined when the members share no common literal — such + * unions are emitted with a structural (shape-matching) decoder instead. + */ + discriminatorField?: string; /** Optional named custom deserializer strategy from spec extension */ unionDeserializer?: string; } diff --git a/packages/generator/src/lang/csharp.ts b/packages/generator/src/lang/csharp.ts index 92e03ca0d..393844141 100644 --- a/packages/generator/src/lang/csharp.ts +++ b/packages/generator/src/lang/csharp.ts @@ -277,6 +277,91 @@ function emitEnumConverter(lines: string[], e: IREnum): void { lines.push('}'); } +/** Union whose members share no discriminator: decode by matching the payload shape. */ +function emitStructuralUnion(lines: string[], u: IRUnion, memberModels: IRModel[]): void { + lines.push(`[JsonConverter(typeof(${u.name}Converter))]`); + lines.push(`public abstract class ${u.name}`); + lines.push('{'); + lines.push('}'); + lines.push(''); + lines.push(`// ${u.name} carries no discriminator field: the member is chosen by which`); + lines.push('// one best matches the payload keys (most recognised, then fewest unrecognised,'); + lines.push('// then fewest declared).'); + lines.push(`internal sealed class ${u.name}Converter : JsonConverter<${u.name}>`); + lines.push('{'); + lines.push(' private static readonly (Type Type, HashSet Keys)[] Shapes ='); + lines.push(' {'); + for (const memberModel of memberModels) { + const keys = memberModel.fields.map((f) => JSON.stringify(f.name)).join(', '); + const set = keys ? `new HashSet { ${keys} }` : 'new HashSet()'; + lines.push(` (typeof(${memberModel.name}), ${set}),`); + } + lines.push(' };'); + lines.push(''); + lines.push(` public override ${u.name} Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)`); + lines.push(' {'); + lines.push(' using var document = JsonDocument.ParseValue(ref reader);'); + lines.push(' var root = document.RootElement;'); + lines.push(' var keys = new HashSet();'); + lines.push(' if (root.ValueKind == JsonValueKind.Object)'); + lines.push(' {'); + lines.push(' foreach (var property in root.EnumerateObject()) keys.Add(property.Name);'); + lines.push(' }'); + lines.push(' Type? best = null;'); + lines.push(' int bestMatched = 0, bestUnknown = 0, bestDeclared = 0;'); + lines.push(' foreach (var (type, shapeKeys) in Shapes)'); + lines.push(' {'); + lines.push(' var matched = 0;'); + lines.push(' foreach (var key in keys)'); + lines.push(' {'); + lines.push(' if (shapeKeys.Contains(key)) matched++;'); + lines.push(' }'); + lines.push(' var unknown = keys.Count - matched;'); + lines.push(' var declared = shapeKeys.Count;'); + lines.push(' var better = best is null'); + lines.push(' || matched > bestMatched'); + lines.push(' || (matched == bestMatched && unknown < bestUnknown)'); + lines.push(' || (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared);'); + lines.push(' if (better)'); + lines.push(' {'); + lines.push(' best = type;'); + lines.push(' bestMatched = matched;'); + lines.push(' bestUnknown = unknown;'); + lines.push(' bestDeclared = declared;'); + lines.push(' }'); + lines.push(' }'); + lines.push(` if (best is null) throw new JsonException("No ${u.name} member matched the payload");`); + lines.push(` return (${u.name})JsonSerializer.Deserialize(root.GetRawText(), best, options)!;`); + lines.push(' }'); + lines.push(''); + lines.push(` public override void Write(Utf8JsonWriter writer, ${u.name} value, JsonSerializerOptions options)`); + lines.push(' {'); + lines.push(' JsonSerializer.Serialize(writer, (object)value, value.GetType(), options);'); + lines.push(' }'); + lines.push('}'); + + for (const memberModel of memberModels) { + lines.push(''); + lines.push(`public class ${memberModel.name} : ${u.name}`); + lines.push('{'); + for (const f of memberModel.fields) { + const sdkName = fieldSdkName(f); + const typeName = csType(f.type); + const isOpt = !f.required || f.nullable; + const nullSuffix = isOpt ? '?' : ''; + lines.push(` [JsonPropertyName("${f.name}")]`); + if (f.type.kind === 'literal') { + lines.push(` public ${typeName} ${sdkName} => ${JSON.stringify(f.type.literalValue ?? '')};`); + } else if (isOpt) { + lines.push(` public ${typeName}${nullSuffix} ${sdkName} { get; set; }`); + } else { + lines.push(` public ${typeName} ${sdkName} { get; set; } = default!;`); + } + } + lines.push('}'); + } +} + function emitUnion( lines: string[], u: IRUnion, @@ -286,6 +371,11 @@ function emitUnion( .map((ref) => ir.models.find((m) => m.name === ref)) .filter(Boolean) as IRModel[]; + if (!u.discriminatorField) { + emitStructuralUnion(lines, u, memberModels); + return; + } + const discriminatorField = u.discriminatorField; const useWebhookPayloadDeserializer = u.unionDeserializer === 'webhook-payload'; diff --git a/packages/generator/src/lang/go.ts b/packages/generator/src/lang/go.ts index f2c2854df..ceaa85f90 100644 --- a/packages/generator/src/lang/go.ts +++ b/packages/generator/src/lang/go.ts @@ -86,6 +86,10 @@ function goType( nullable: !!opts.nullable, }); case 'enum': + // Inline (unnamed) enums have no ref. They are strings on the wire, so + // emit `string` — `any` would make the `string(params.X)` conversion the + // query builder emits a compile error. + return ft.ref ?? 'string'; case 'model': case 'union': return ft.ref ?? 'any'; @@ -227,8 +231,96 @@ function emitModel(lines: string[], m: IRModel, allModels: IRModel[]): void { } } +/** Shared helper for unions with no discriminator on the wire. */ +function emitUnionShapeHelper(lines: string[]): void { + lines.push('// unionMemberShape lists the JSON keys one member of an undiscriminated union declares.'); + lines.push('type unionMemberShape struct {'); + lines.push('\tkeys map[string]struct{}'); + lines.push('}'); + lines.push(''); + lines.push('// pickUnionMember selects the member that best fits the payload: most keys'); + lines.push('// recognised, then fewest unrecognised, then fewest declared. Returns -1 when'); + lines.push('// the payload is not a JSON object.'); + lines.push('func pickUnionMember(data []byte, shapes []unionMemberShape) int {'); + lines.push('\tvar raw map[string]json.RawMessage'); + lines.push('\tif err := json.Unmarshal(data, &raw); err != nil {'); + lines.push('\t\treturn -1'); + lines.push('\t}'); + lines.push('\tbest := -1'); + lines.push('\tbestMatched, bestUnknown, bestDeclared := 0, 0, 0'); + lines.push('\tfor i, shape := range shapes {'); + lines.push('\t\tmatched := 0'); + lines.push('\t\tfor k := range raw {'); + lines.push('\t\t\tif _, ok := shape.keys[k]; ok {'); + lines.push('\t\t\t\tmatched++'); + lines.push('\t\t\t}'); + lines.push('\t\t}'); + lines.push('\t\tunknown := len(raw) - matched'); + lines.push('\t\tdeclared := len(shape.keys)'); + lines.push('\t\tbetter := best == -1 ||'); + lines.push('\t\t\tmatched > bestMatched ||'); + lines.push('\t\t\t(matched == bestMatched && unknown < bestUnknown) ||'); + lines.push('\t\t\t(matched == bestMatched && unknown == bestUnknown && declared < bestDeclared)'); + lines.push('\t\tif better {'); + lines.push('\t\t\tbest, bestMatched, bestUnknown, bestDeclared = i, matched, unknown, declared'); + lines.push('\t\t}'); + lines.push('\t}'); + lines.push('\treturn best'); + lines.push('}'); +} + +/** Union whose members share no discriminator: decode by matching the payload shape. */ +function emitStructuralUnion(lines: string[], u: IRUnion, models: IRModel[]): void { + const shapesVar = `${u.name.charAt(0).toLowerCase()}${u.name.slice(1)}Shapes`; + lines.push(`type ${u.name} struct {`); + const fieldRows = u.memberRefs.map((ref) => [ref, `*${ref}`]); + // Raw keeps the original payload so nothing is lost when no member fits. + fieldRows.push(['Raw', 'json.RawMessage']); + for (const line of goAligned(fieldRows)) lines.push(line); + lines.push('}'); + lines.push(''); + lines.push(`var ${shapesVar} = []unionMemberShape{`); + for (const ref of u.memberRefs) { + const model = models.find((m) => m.name === ref); + const keys = (model?.fields ?? []).map((f) => `${JSON.stringify(f.name)}: {}`); + lines.push(`\t{keys: map[string]struct{}{${keys.join(', ')}}},`); + } + lines.push('}'); + lines.push(''); + lines.push(`// UnmarshalJSON decodes ${u.name}, which carries no discriminator field:`); + lines.push('// the member is chosen by which one best matches the payload keys. The raw'); + lines.push('// payload is always kept in Raw so an unrecognised shape is never a decode error.'); + lines.push(`func (u *${u.name}) UnmarshalJSON(data []byte) error {`); + lines.push('\tu.Raw = append(json.RawMessage(nil), data...)'); + lines.push(`\tswitch pickUnionMember(data, ${shapesVar}) {`); + u.memberRefs.forEach((ref, i) => { + lines.push(`\tcase ${i}:`); + lines.push(`\t\tu.${ref} = &${ref}{}`); + lines.push(`\t\treturn json.Unmarshal(data, u.${ref})`); + }); + lines.push('\t}'); + lines.push('\treturn nil'); + lines.push('}'); + lines.push(''); + lines.push(`func (u ${u.name}) MarshalJSON() ([]byte, error) {`); + for (const ref of u.memberRefs) { + lines.push(`\tif u.${ref} != nil {`); + lines.push(`\t\treturn json.Marshal(u.${ref})`); + lines.push('\t}'); + } + lines.push('\tif len(u.Raw) > 0 {'); + lines.push('\t\treturn u.Raw, nil'); + lines.push('\t}'); + lines.push(`\treturn nil, fmt.Errorf("empty ${u.name}")`); + lines.push('}'); +} + function emitUnion(lines: string[], u: IRUnion, models: IRModel[]): void { const discField = u.discriminatorField; + if (!discField) { + emitStructuralUnion(lines, u, models); + return; + } const discGoName = goExportName(discField); lines.push(`type ${u.name} struct {`); const fieldRows = u.memberRefs.map((ref) => [ref, `*${ref}`]); @@ -371,6 +463,11 @@ function generateTypes(ir: IR): string { lines.push(''); } + if (ir.unions.some((u) => !u.discriminatorField)) { + emitUnionShapeHelper(lines); + lines.push(''); + } + for (const u of ir.unions) { emitUnion(lines, u, ir.models); lines.push(''); diff --git a/packages/generator/src/lang/kotlin.ts b/packages/generator/src/lang/kotlin.ts index 329f00841..4ec010a77 100644 --- a/packages/generator/src/lang/kotlin.ts +++ b/packages/generator/src/lang/kotlin.ts @@ -36,7 +36,9 @@ function ktType(ft: IRFieldType): string { return ft.format === 'int64' ? 'Long' : 'Int'; if (ft.primitive === 'number') return 'Double'; if (ft.primitive === 'boolean') return 'Boolean'; - if (ft.primitive === 'any') return 'Any'; + // kotlinx has no serializer for `Any`; JsonElement is the idiomatic type + // for an open-ended JSON value and serializes out of the box. + if (ft.primitive === 'any') return 'JsonElement'; if (ft.primitive === 'string' && ft.format === 'date-time') return 'OffsetDateTime'; return 'String'; case 'enum': @@ -133,6 +135,15 @@ function generateModels(ir: IR): string { let needSerialName = false; let needTransient = false; const needWebhookPayloadUnionSerializer = ir.unions.some((u) => u.unionDeserializer === 'webhook-payload'); + const needStructuralUnionSerializer = ir.unions.some((u) => !u.discriminatorField); + const usesAny = (ft: IRFieldType): boolean => + (ft.kind === 'primitive' && ft.primitive === 'any') || + (!!ft.items && usesAny(ft.items)) || + (!!ft.valueType && usesAny(ft.valueType)); + const needJsonElement = needStructuralUnionSerializer || + ir.models.some((m) => m.fields.some((f) => usesAny(f.type)) || + m.inlineObjects.some((i) => i.fields.some((f) => usesAny(f.type)))) || + ir.params.some((p) => p.params.some((q) => usesAny(q.type))); if (ir.enums.length > 0) needSerialName = true; if (ir.unions.length > 0) needSerialName = true; @@ -159,20 +170,23 @@ function generateModels(ir: IR): string { const imports: string[] = []; if (needDateTime) imports.push('import java.time.OffsetDateTime'); if (needDateTime) imports.push('import java.time.format.DateTimeFormatter'); - if (needDateTime || needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.KSerializer'); + const needCustomUnionSerializer = needWebhookPayloadUnionSerializer || needStructuralUnionSerializer; + if (needDateTime || needCustomUnionSerializer) imports.push('import kotlinx.serialization.KSerializer'); if (needSerialName) imports.push('import kotlinx.serialization.SerialName'); imports.push('import kotlinx.serialization.Serializable'); if (needTransient) imports.push('import kotlinx.serialization.Transient'); if (needDateTime) imports.push('import kotlinx.serialization.descriptors.PrimitiveKind'); if (needDateTime) imports.push('import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor'); - if (needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.descriptors.buildClassSerialDescriptor'); - if (needDateTime || needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.encoding.Decoder'); - if (needDateTime || needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.encoding.Encoder'); - if (needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.json.JsonDecoder'); - if (needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.json.JsonEncoder'); + if (needCustomUnionSerializer) imports.push('import kotlinx.serialization.descriptors.buildClassSerialDescriptor'); + if (needDateTime || needCustomUnionSerializer) imports.push('import kotlinx.serialization.encoding.Decoder'); + if (needDateTime || needCustomUnionSerializer) imports.push('import kotlinx.serialization.encoding.Encoder'); + if (needStructuralUnionSerializer) imports.push('import kotlinx.serialization.json.Json'); + if (needCustomUnionSerializer) imports.push('import kotlinx.serialization.json.JsonDecoder'); + if (needJsonElement) imports.push('import kotlinx.serialization.json.JsonElement'); + if (needCustomUnionSerializer) imports.push('import kotlinx.serialization.json.JsonEncoder'); if (needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.json.contentOrNull'); - if (needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.json.decodeFromJsonElement'); - if (needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.json.jsonObject'); + if (needCustomUnionSerializer) imports.push('import kotlinx.serialization.json.decodeFromJsonElement'); + if (needCustomUnionSerializer) imports.push('import kotlinx.serialization.json.jsonObject'); if (needWebhookPayloadUnionSerializer) imports.push('import kotlinx.serialization.json.jsonPrimitive'); lines.push(imports.join('\n')); @@ -254,15 +268,83 @@ function emitUnion( const discriminatorField = u.discriminatorField; const useWebhookPayloadDeserializer = u.unionDeserializer === 'webhook-payload'; + // No common literal across members: kotlinx cannot key a sealed hierarchy on a + // field that isn't on the wire (every member would need the same @SerialName), + // so decode structurally instead. + const structural = !discriminatorField; if (useWebhookPayloadDeserializer) { lines.push('@Serializable(with = WebhookPayloadUnionSerializer::class)'); + } else if (structural) { + lines.push(`@Serializable(with = ${u.name}Serializer::class)`); } else { lines.push('@Serializable'); } - lines.push(`sealed interface ${u.name} {`); - lines.push(` val ${snakeToCamel(discriminatorField)}: String`); - lines.push('}'); + if (structural) { + lines.push(`sealed interface ${u.name}`); + } else { + lines.push(`sealed interface ${u.name} {`); + lines.push(` val ${snakeToCamel(discriminatorField!)}: String`); + lines.push('}'); + } + + if (structural) { + lines.push(''); + lines.push(`// ${u.name} carries no discriminator field: the member is chosen by which one`); + lines.push('// best matches the payload keys (most recognised, then fewest unrecognised,'); + lines.push('// then fewest declared).'); + lines.push(`object ${u.name}Serializer : KSerializer<${u.name}> {`); + lines.push(` override val descriptor = buildClassSerialDescriptor("${u.name}")`); + lines.push(''); + lines.push(` private val shapes: List, (Json, JsonElement) -> ${u.name}>> = listOf(`); + for (const memberModel of memberModels) { + const keys = memberModel.fields.map((f) => JSON.stringify(f.name)).join(', '); + const set = keys ? `setOf(${keys})` : 'setOf()'; + lines.push( + ` ${set} to { json, element -> json.decodeFromJsonElement(${memberModel.name}.serializer(), element) },`, + ); + } + lines.push(' )'); + lines.push(''); + lines.push(` override fun serialize(encoder: Encoder, value: ${u.name}) {`); + lines.push(` val jsonEncoder = encoder as? JsonEncoder ?: error("${u.name}Serializer only supports JSON")`); + lines.push(' when (value) {'); + for (const memberModel of memberModels) { + lines.push( + ` is ${memberModel.name} -> jsonEncoder.encodeSerializableValue(${memberModel.name}.serializer(), value)`, + ); + } + lines.push(' }'); + lines.push(' }'); + lines.push(''); + lines.push(` override fun deserialize(decoder: Decoder): ${u.name} {`); + lines.push(` val jsonDecoder = decoder as? JsonDecoder ?: error("${u.name}Serializer only supports JSON")`); + lines.push(' val element = jsonDecoder.decodeJsonElement()'); + lines.push(' val keys = element.jsonObject.keys'); + lines.push(` var best: Pair, (Json, JsonElement) -> ${u.name}>? = null`); + lines.push(' var bestMatched = 0'); + lines.push(' var bestUnknown = 0'); + lines.push(' var bestDeclared = 0'); + lines.push(' for (shape in shapes) {'); + lines.push(' val matched = keys.count { it in shape.first }'); + lines.push(' val unknown = keys.size - matched'); + lines.push(' val declared = shape.first.size'); + lines.push(' val better = best == null ||'); + lines.push(' matched > bestMatched ||'); + lines.push(' (matched == bestMatched && unknown < bestUnknown) ||'); + lines.push(' (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared)'); + lines.push(' if (better) {'); + lines.push(' best = shape'); + lines.push(' bestMatched = matched'); + lines.push(' bestUnknown = unknown'); + lines.push(' bestDeclared = declared'); + lines.push(' }'); + lines.push(' }'); + lines.push(` val chosen = best ?: error("No ${u.name} member matched the payload")`); + lines.push(' return chosen.second(jsonDecoder.json, element)'); + lines.push(' }'); + lines.push('}'); + } if (useWebhookPayloadDeserializer) { // Member-driven: the serialize/deserialize branches iterate the union's @@ -312,11 +394,16 @@ function emitUnion( lines.push(''); lines.push('@Serializable'); - lines.push(`@SerialName("${litValue}")`); + if (!structural) lines.push(`@SerialName("${litValue}")`); + if (memberModel.fields.length === 0) { + // A member with no fields cannot be a `data class` (needs ≥1 parameter). + lines.push(`class ${memberModel.name} : ${u.name}`); + continue; + } lines.push(`data class ${memberModel.name}(`); - if (!memberModel.fields.some((f) => f.name === discriminatorField)) { + if (!structural && !memberModel.fields.some((f) => f.name === discriminatorField)) { lines.push( - ` override val ${snakeToCamel(discriminatorField)}: String = "${litValue}",`, + ` override val ${snakeToCamel(discriminatorField!)}: String = "${litValue}",`, ); } const bodyLiteralFields: IRField[] = []; diff --git a/packages/generator/src/lang/python.ts b/packages/generator/src/lang/python.ts index 6361c667b..8d29c62f9 100644 --- a/packages/generator/src/lang/python.ts +++ b/packages/generator/src/lang/python.ts @@ -1003,9 +1003,15 @@ function generateUtils(ir: IR): string { ]; const customUnions = ir.unions.filter((u) => u.unionDeserializer === 'webhook-payload'); - if (customUnions.length > 0) { + // Import every union this module names at module level, not just the ones with + // a custom deserializer: `_UNION_DISCRIMINATORS` below references the plain + // discriminated unions too, and a missing name is a NameError on import — which + // `py_compile` does not catch because it only parses. + const discriminatedUnions = ir.unions.filter((u) => !u.unionDeserializer && u.discriminatorField); + const referencedUnions = [...customUnions, ...discriminatedUnions]; + if (referencedUnions.length > 0) { const importNames = new Set(); - for (const u of customUnions) { + for (const u of referencedUnions) { importNames.add(u.name); for (const ref of u.memberRefs) importNames.add(ref); } @@ -1040,6 +1046,35 @@ function generateUtils(ir: IR): string { ' return None', '', '', + 'def _union_members(tp: object) -> list[type]:', + ' """Dataclass members of a Union, ignoring None and non-dataclass arms."""', + ' if get_origin(tp) is list:', + ' return []', + ' return [arg for arg in get_args(tp) if _is_dataclass_type(arg)]', + '', + '', + 'def _declared_keys(member: type) -> set[str]:', + ' return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)}', + '', + '', + 'def _match_union_member(members: list[type], data: dict) -> type:', + ' """Pick the union member that best fits a payload with no discriminator.', + '', + ' Ranks by: most payload keys recognised, then fewest unrecognised, then', + ' fewest declared fields (so an empty member only wins an empty payload).', + ' """', + ' keys = {k.replace("-", "_").lower() for k in data}', + ' best = members[0]', + ' best_score: tuple[int, int, int] | None = None', + ' for member in members:', + ' declared = _declared_keys(member)', + ' matched = len(keys & declared)', + ' score = (-matched, len(keys - declared), len(declared))', + ' if best_score is None or score < best_score:', + ' best, best_score = member, score', + ' return best', + '', + '', 'def _resolve_list_item_type(tp: object) -> object | None:', ' """Extract the item type from list[X]."""', ' origin = get_origin(tp)', @@ -1058,6 +1093,18 @@ function generateUtils(ir: IR): string { ' if custom is not None and isinstance(value, dict):', ' return custom(value)', ' if isinstance(value, dict):', + ' members = _union_members(tp)', + ' if len(members) > 1:', + ' # Multi-member union: pick by discriminator when the spec has one,', + ' # otherwise by which member best matches the payload shape. Taking', + ' # the first member (the old behaviour) silently dropped the data.', + ' disc = _UNION_DISCRIMINATORS.get(tp)', + ' if disc is not None:', + ' field_name, by_value = disc', + ' chosen = by_value.get(value.get(field_name))', + ' if chosen is not None:', + ' return _deserialize_dataclass(chosen, value)', + ' return _deserialize_dataclass(_match_union_member(members, value), value)', ' nested = _resolve_type(tp)', ' if nested is not None:', ' return _deserialize_dataclass(nested, value)', @@ -1127,6 +1174,28 @@ function generateUtils(ir: IR): string { } lines.push('}'); lines.push(''); + lines.push('# Unions the spec discriminates by a literal field: {union: (field, {value: member})}.'); + lines.push('# Unions absent here have no discriminator and are matched by payload shape.'); + lines.push('_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = {'); + for (const u of ir.unions) { + if (u.unionDeserializer || !u.discriminatorField) continue; + const entries: string[] = []; + for (const ref of u.memberRefs) { + const model = ir.models.find((m) => m.name === ref); + const litField = model?.fields.find( + (f) => f.name === u.discriminatorField && f.type.kind === 'literal', + ); + const litValue = litField?.type.literalValue; + if (litValue === undefined) continue; + entries.push(`${JSON.stringify(litValue)}: ${ref}`); + } + if (entries.length === 0) continue; + lines.push( + ` ${u.name}: (${JSON.stringify(u.discriminatorField)}, {${entries.join(', ')}}),`, + ); + } + lines.push('}'); + lines.push(''); lines.push(''); lines.push('def deserialize(cls: Type[T], data: dict) -> T:'); lines.push(' """Create a typed instance from a dict, recursively deserializing nested values."""'); diff --git a/packages/generator/src/lang/swift.ts b/packages/generator/src/lang/swift.ts index 4968ec6f9..6cc175df3 100644 --- a/packages/generator/src/lang/swift.ts +++ b/packages/generator/src/lang/swift.ts @@ -166,8 +166,56 @@ function emitModel(lines: string[], m: IRModel, allModels: IRModel[]): void { lines.push('}'); } +/** Union whose members share no discriminator: try each member, most specific first. */ +function emitStructuralUnion(lines: string[], u: IRUnion, models: IRModel[]): void { + lines.push(`public enum ${u.name}: Codable {`); + for (const ref of u.memberRefs) { + const c = ref.charAt(0).toLowerCase() + ref.slice(1); + lines.push(` case ${c}(${ref})`); + } + lines.push(''); + // Synthesized decoders only fail on a missing required key, so ordering by + // required-field count descending makes the most demanding member win and + // leaves the loosest one (typically an empty object) as the fallback. + const ordered = [...u.memberRefs].sort((a, b) => { + const req = (ref: string) => + (models.find((m) => m.name === ref)?.fields ?? []).filter((f) => !isOptionalField(f)).length; + const all = (ref: string) => (models.find((m) => m.name === ref)?.fields ?? []).length; + return req(b) - req(a) || all(b) - all(a) || a.localeCompare(b); + }); + lines.push(' public init(from decoder: Decoder) throws {'); + lines.push(` // ${u.name} carries no discriminator field: members are tried from most`); + lines.push(' // to least demanding, so the loosest one only wins when nothing else fits.'); + for (const ref of ordered) { + const c = ref.charAt(0).toLowerCase() + ref.slice(1); + lines.push(` if let value = try? ${ref}(from: decoder) {`); + lines.push(` self = .${c}(value)`); + lines.push(' return'); + lines.push(' }'); + } + lines.push(' throw DecodingError.dataCorrupted('); + lines.push(` DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "No ${u.name} member matched the payload")`); + lines.push(' )'); + lines.push(' }'); + lines.push(''); + lines.push(' public func encode(to encoder: Encoder) throws {'); + lines.push(' switch self {'); + for (const ref of u.memberRefs) { + const c = ref.charAt(0).toLowerCase() + ref.slice(1); + lines.push(` case .${c}(let value):`); + lines.push(' try value.encode(to: encoder)'); + } + lines.push(' }'); + lines.push(' }'); + lines.push('}'); +} + function emitUnion(lines: string[], u: IRUnion, models: IRModel[]): void { const discField = u.discriminatorField; + if (!discField) { + emitStructuralUnion(lines, u, models); + return; + } const discSwiftName = snakeToCamel(discField.replace(/[-:]/g, '_')); lines.push(`public enum ${u.name}: Codable {`); for (const ref of u.memberRefs) { diff --git a/packages/generator/src/transform.ts b/packages/generator/src/transform.ts index 941798e0d..18e611352 100644 --- a/packages/generator/src/transform.ts +++ b/packages/generator/src/transform.ts @@ -106,9 +106,20 @@ function resolveFieldType(schema: Schema): IRFieldType { schema.additionalProperties && typeof schema.additionalProperties === 'object' ) { + // An EMPTY additionalProperties schema means "any value", not "string". + // getSchemaType() falls back to 'string' for a schema with no type, which + // turned `Record` into map[string]string — so an error payload + // like `{record: {type, id}, query}` failed to deserialize and the typed + // ApiError was lost. + const ap = schema.additionalProperties as Schema; + const isOpen = + !ap.type && !ap.$ref && !ap.properties && !ap.enum && !ap.items && + !ap.allOf && !ap.anyOf && !ap.oneOf && !ap.additionalProperties; return { kind: 'record', - valueType: resolveFieldType(schema.additionalProperties), + valueType: isOpen + ? { kind: 'primitive', primitive: 'any' } + : resolveFieldType(ap), }; } @@ -309,32 +320,60 @@ function transformModel(name: string, schema: Schema): IRModel { return { name, description: schema.description, fields, isError, inlineObjects }; } +/** Names of properties that are a single-value string enum (a literal). */ +function literalFieldNames(schema: Schema | undefined): Set { + if (!schema) return new Set(); + // Resolve allOf to get merged properties + const resolved = schema.allOf ? resolveAllOf(schema) : schema; + const merged = { + ...resolved, + properties: { ...resolved.properties, ...schema.properties }, + }; + const names = new Set(); + for (const [propName, propSchema] of Object.entries(merged.properties || {})) { + if (propSchema.enum && propSchema.enum.length === 1 && typeof propSchema.enum[0] === 'string') { + names.add(propName); + } + } + return names; +} + +/** + * Name of the field that discriminates the union members, or `undefined` when + * the union has none. + * + * A field only qualifies when EVERY member carries a literal on it — a + * discriminator that some members lack cannot select between them. Scanning + * just the first member (as this used to do) produced a phantom discriminator + * for unions like `AuditEventDetailsUnion`, whose selector is a field on the + * PARENT object (`event_key`) and whose members share no common literal. The + * emitters then generated switches on a key that never appears on the wire: + * decoding either threw or silently returned the first member. Returning + * `undefined` routes those unions to each language's structural fallback. + */ function detectDiscriminatorField( schema: Schema, memberRefs: string[], schemas: Record, -): string { +): string | undefined { // Prefer explicit OpenAPI discriminator.propertyName const disc = (schema as Record).discriminator as { propertyName?: string } | undefined; if (disc?.propertyName) { return disc.propertyName; } - // Fall back to scanning first member for a literal (single-value enum) field - if (memberRefs.length === 0) return 'type'; - const firstSchema = schemas[memberRefs[0]]; - if (!firstSchema) return 'type'; - // Resolve allOf to get merged properties - const resolved = firstSchema.allOf ? resolveAllOf(firstSchema) : firstSchema; - const merged = { - ...resolved, - properties: { ...resolved.properties, ...firstSchema.properties }, - }; - for (const [propName, propSchema] of Object.entries(merged.properties || {})) { - if (propSchema.enum && propSchema.enum.length === 1 && typeof propSchema.enum[0] === 'string') { - return propName; - } - } - return 'type'; + if (memberRefs.length === 0) return undefined; + // Keep only literals that every member agrees on + let common: Set | undefined; + for (const ref of memberRefs) { + const names = literalFieldNames(schemas[ref]); + if (names.size === 0) return undefined; + common = common === undefined ? names : new Set([...common].filter((n) => names.has(n))); + if (common.size === 0) return undefined; + } + if (!common || common.size === 0) return undefined; + // Prefer the conventional name, otherwise pick deterministically + if (common.has('type')) return 'type'; + return [...common].sort()[0]; } function transformUnion(name: string, schema: Schema, schemas: Record): IRUnion { diff --git a/packages/generator/tests/additional-props-bool/snapshots/kt/Models.kt b/packages/generator/tests/additional-props-bool/snapshots/kt/Models.kt index 45de3d74b..065603cd8 100644 --- a/packages/generator/tests/additional-props-bool/snapshots/kt/Models.kt +++ b/packages/generator/tests/additional-props-bool/snapshots/kt/Models.kt @@ -1,6 +1,7 @@ package com.pachca.sdk import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonElement @Serializable class Metadata @@ -9,5 +10,5 @@ class Metadata data class Event( val id: Int, val type: String, - val metadata: Map? = null, + val metadata: Map? = null, ) diff --git a/packages/generator/tests/array-no-brackets/snapshots/py/utils.py b/packages/generator/tests/array-no-brackets/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/array-no-brackets/snapshots/py/utils.py +++ b/packages/generator/tests/array-no-brackets/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/crud/snapshots/py/utils.py b/packages/generator/tests/crud/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/crud/snapshots/py/utils.py +++ b/packages/generator/tests/crud/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/date-format/snapshots/py/utils.py b/packages/generator/tests/date-format/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/date-format/snapshots/py/utils.py +++ b/packages/generator/tests/date-format/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/edge-cases/snapshots/py/utils.py b/packages/generator/tests/edge-cases/snapshots/py/utils.py index 78c22882d..93087a355 100644 --- a/packages/generator/tests/edge-cases/snapshots/py/utils.py +++ b/packages/generator/tests/edge-cases/snapshots/py/utils.py @@ -8,6 +8,12 @@ import httpx +from .models import ( + MessageNotification, + NotificationUnion, + ReactionNotification, +) + T = TypeVar("T") @@ -29,6 +35,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +82,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +130,12 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { + NotificationUnion: ("kind", {"message": MessageNotification, "message": ReactionNotification}), +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/generator.test.ts b/packages/generator/tests/generator.test.ts index 391d36fc7..4c87a9be6 100644 --- a/packages/generator/tests/generator.test.ts +++ b/packages/generator/tests/generator.test.ts @@ -69,6 +69,24 @@ describe('generator', () => { ).toBe(true); } } + + // Semantic guard: no union may be emitted with an EMPTY discriminator + // value. That is the signature of a union whose members share no literal + // being forced down the discriminated path — it compiles, then throws + // (duplicate discriminators in C#/Kotlin) or silently mis-decodes at + // runtime, which a snapshot alone cannot catch. + for (const [file, content] of generated) { + const emptyDiscriminators = [ + /\[JsonDerivedType\(typeof\([A-Za-z0-9_]+\), ""\)\]/, // C# + /@SerialName\(""\)/, // Kotlin + ]; + for (const pattern of emptyDiscriminators) { + expect( + pattern.test(content), + `${suite}/${file}: union emitted with an empty discriminator value`, + ).toBe(false); + } + } }); } }); diff --git a/packages/generator/tests/multi-path-params/snapshots/py/utils.py b/packages/generator/tests/multi-path-params/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/multi-path-params/snapshots/py/utils.py +++ b/packages/generator/tests/multi-path-params/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/patch/snapshots/py/utils.py b/packages/generator/tests/patch/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/patch/snapshots/py/utils.py +++ b/packages/generator/tests/patch/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/record/snapshots/py/utils.py b/packages/generator/tests/record/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/record/snapshots/py/utils.py +++ b/packages/generator/tests/record/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/redirect/snapshots/py/utils.py b/packages/generator/tests/redirect/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/redirect/snapshots/py/utils.py +++ b/packages/generator/tests/redirect/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/search/snapshots/py/utils.py b/packages/generator/tests/search/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/search/snapshots/py/utils.py +++ b/packages/generator/tests/search/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/union-no-discriminator/fixture.yaml b/packages/generator/tests/union-no-discriminator/fixture.yaml new file mode 100644 index 000000000..7cc0fb7d9 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/fixture.yaml @@ -0,0 +1,108 @@ +openapi: 3.0.0 +info: + title: Test API — Union without a discriminator + version: 1.0.0 +# Union whose members share no literal field: the selector lives on the PARENT +# object (`event_key`), exactly like AuditEventDetailsUnion in the real spec. +# Emitters must fall back to structural decoding instead of inventing a `type` +# key that never appears on the wire. +paths: + /events: + get: + operationId: getEvents + summary: Список событий + tags: + - Events + responses: + '200': + description: Успешный ответ + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + $ref: '#/components/schemas/Event' +components: + schemas: + DetailsEmpty: + type: object + description: Пустые детали — у события нет дополнительных полей. + + DetailsChat: + type: object + required: + - chat_id + properties: + chat_id: + type: integer + description: Идентификатор чата. + description: Детали с одним чатом. + + DetailsCall: + type: object + required: + - chat_id + - duration + properties: + chat_id: + type: integer + description: Идентификатор чата. + duration: + type: integer + description: Длительность звонка в секундах. + recording_size: + type: integer + format: int64 + nullable: true + description: Размер записи в байтах. + description: Детали звонка — расширяет чат длительностью. + + DetailsRename: + type: object + required: + - old_name + - new_name + properties: + old_name: + type: string + description: Прежнее название. + new_name: + type: string + description: Новое название. + description: Детали переименования. + + EventDetailsUnion: + anyOf: + - $ref: '#/components/schemas/DetailsEmpty' + - $ref: '#/components/schemas/DetailsChat' + - $ref: '#/components/schemas/DetailsCall' + - $ref: '#/components/schemas/DetailsRename' + description: Детали события. Структура зависит от значения event_key. + + Event: + type: object + required: + - id + - event_key + - details + properties: + id: + type: integer + description: Идентификатор события. + event_key: + type: string + enum: + - chat_created + - chat_renamed + - call_finished + description: Тип события — он же селектор для details. + details: + allOf: + - $ref: '#/components/schemas/EventDetailsUnion' + description: Дополнительные детали события. + description: Событие журнала аудита. diff --git a/packages/generator/tests/union-no-discriminator/snapshots/cs/Client.cs b/packages/generator/tests/union-no-discriminator/snapshots/cs/Client.cs new file mode 100644 index 000000000..295aa5007 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/cs/Client.cs @@ -0,0 +1,87 @@ +#nullable enable + +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Text.Json; +using System.Threading; + +namespace Pachca.Sdk; + +public class EventsService +{ + + public virtual async System.Threading.Tasks.Task GetEventsAsync(CancellationToken cancellationToken = default) + { + throw new NotImplementedException("Events.getEvents is not implemented"); + } +} + +public sealed class EventsServiceImpl : EventsService +{ + private readonly string _baseUrl; + private readonly HttpClient _client; + + internal EventsServiceImpl(string baseUrl, HttpClient client) + { + _baseUrl = baseUrl; + _client = client; + } + + public override async System.Threading.Tasks.Task GetEventsAsync(CancellationToken cancellationToken = default) + { + var url = $"{_baseUrl}/events"; + using var request = new HttpRequestMessage(HttpMethod.Get, url); + using var response = await PachcaUtils.SendWithRetryAsync(_client, request, cancellationToken).ConfigureAwait(false); + var json = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + switch ((int)response.StatusCode) + { + case 200: + return PachcaUtils.Deserialize(json); + default: + throw new InvalidOperationException($"Unexpected status code: {(int)response.StatusCode}"); + } + } +} + +public sealed class PachcaClient : IDisposable +{ + private readonly HttpClient? _client; + + public EventsService Events { get; } + + private PachcaClient(EventsService events) + { + Events = events; + } + + public PachcaClient(string token, string baseUrl, EventsService? events = null) + { + _client = new HttpClient(); + _client.DefaultRequestHeaders.Authorization = + new AuthenticationHeaderValue("Bearer", token); + + Events = events ?? new EventsServiceImpl(baseUrl, _client); + } + + public PachcaClient(string baseUrl, HttpClient client, EventsService? events = null) + { + _client = client; + + Events = events ?? new EventsServiceImpl(baseUrl, _client); + } + + public static PachcaClient Stub(EventsService? events = null) + { + return new PachcaClient(events ?? new EventsService()); + } + + public void Dispose() + { + _client?.Dispose(); + GC.SuppressFinalize(this); + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/cs/Models.cs b/packages/generator/tests/union-no-discriminator/snapshots/cs/Models.cs new file mode 100644 index 000000000..ba9b88bb5 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/cs/Models.cs @@ -0,0 +1,113 @@ +#nullable enable + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Pachca.Sdk; + +[JsonConverter(typeof(EventDetailsUnionConverter))] +public abstract class EventDetailsUnion +{ +} + +// EventDetailsUnion carries no discriminator field: the member is chosen by which +// one best matches the payload keys (most recognised, then fewest unrecognised, +// then fewest declared). +internal sealed class EventDetailsUnionConverter : JsonConverter +{ + private static readonly (Type Type, HashSet Keys)[] Shapes = + { + (typeof(DetailsEmpty), new HashSet()), + (typeof(DetailsChat), new HashSet { "chat_id" }), + (typeof(DetailsCall), new HashSet { "chat_id", "duration", "recording_size" }), + (typeof(DetailsRename), new HashSet { "old_name", "new_name" }), + }; + + public override EventDetailsUnion Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + using var document = JsonDocument.ParseValue(ref reader); + var root = document.RootElement; + var keys = new HashSet(); + if (root.ValueKind == JsonValueKind.Object) + { + foreach (var property in root.EnumerateObject()) keys.Add(property.Name); + } + Type? best = null; + int bestMatched = 0, bestUnknown = 0, bestDeclared = 0; + foreach (var (type, shapeKeys) in Shapes) + { + var matched = 0; + foreach (var key in keys) + { + if (shapeKeys.Contains(key)) matched++; + } + var unknown = keys.Count - matched; + var declared = shapeKeys.Count; + var better = best is null + || matched > bestMatched + || (matched == bestMatched && unknown < bestUnknown) + || (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared); + if (better) + { + best = type; + bestMatched = matched; + bestUnknown = unknown; + bestDeclared = declared; + } + } + if (best is null) throw new JsonException("No EventDetailsUnion member matched the payload"); + return (EventDetailsUnion)JsonSerializer.Deserialize(root.GetRawText(), best, options)!; + } + + public override void Write(Utf8JsonWriter writer, EventDetailsUnion value, JsonSerializerOptions options) + { + JsonSerializer.Serialize(writer, (object)value, value.GetType(), options); + } +} + +public class DetailsEmpty : EventDetailsUnion +{ +} + +public class DetailsChat : EventDetailsUnion +{ + [JsonPropertyName("chat_id")] + public int ChatId { get; set; } = default!; +} + +public class DetailsCall : EventDetailsUnion +{ + [JsonPropertyName("chat_id")] + public int ChatId { get; set; } = default!; + [JsonPropertyName("duration")] + public int Duration { get; set; } = default!; + [JsonPropertyName("recording_size")] + public long? RecordingSize { get; set; } +} + +public class DetailsRename : EventDetailsUnion +{ + [JsonPropertyName("old_name")] + public string OldName { get; set; } = default!; + [JsonPropertyName("new_name")] + public string NewName { get; set; } = default!; +} + +public class Event +{ + [JsonPropertyName("id")] + public int Id { get; set; } = default!; + [JsonPropertyName("event_key")] + public object EventKey { get; set; } = default!; + [JsonPropertyName("details")] + public EventDetailsUnion Details { get; set; } = default!; +} + +public class GetEventsResponse +{ + [JsonPropertyName("data")] + public List Data { get; set; } = new(); +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/cs/Utils.cs b/packages/generator/tests/union-no-discriminator/snapshots/cs/Utils.cs new file mode 100644 index 000000000..7a862e7b1 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/cs/Utils.cs @@ -0,0 +1,103 @@ +#nullable enable + +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +namespace Pachca.Sdk; + +internal static class PachcaUtils +{ + private const int MaxRetries = 3; + private static readonly HashSet Retryable5xx = new() { 500, 502, 503, 504 }; + private static readonly Random JitterRandom = new(); + + internal static readonly JsonSerializerOptions JsonOptions = new() + { + DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, + PropertyNameCaseInsensitive = true, + }; + + private static TimeSpan AddJitter(TimeSpan delay) + { + var factor = 0.5 + JitterRandom.NextDouble() * 0.5; + return TimeSpan.FromMilliseconds(delay.TotalMilliseconds * factor); + } + + internal static async Task SendWithRetryAsync( + HttpClient client, + HttpRequestMessage request, + CancellationToken cancellationToken = default) + { + for (var attempt = 0; attempt <= MaxRetries; attempt++) + { + HttpRequestMessage req; + if (attempt == 0) + { + req = request; + } + else + { + req = await CloneRequestAsync(request).ConfigureAwait(false); + } + + var response = await client.SendAsync(req, cancellationToken).ConfigureAwait(false); + + if ((int)response.StatusCode == 429 && attempt < MaxRetries) + { + var delay = response.Headers.RetryAfter?.Delta + ?? TimeSpan.FromSeconds(Math.Pow(2, attempt)); + await System.Threading.Tasks.Task.Delay(AddJitter(delay), cancellationToken).ConfigureAwait(false); + response.Dispose(); + continue; + } + + if (Retryable5xx.Contains((int)response.StatusCode) && attempt < MaxRetries) + { + var delay = AddJitter(TimeSpan.FromSeconds(10 * Math.Pow(2, attempt))); + await System.Threading.Tasks.Task.Delay(delay, cancellationToken).ConfigureAwait(false); + response.Dispose(); + continue; + } + + return response; + } + + return await client.SendAsync( + await CloneRequestAsync(request).ConfigureAwait(false), + cancellationToken).ConfigureAwait(false); + } + + private static async Task CloneRequestAsync(HttpRequestMessage request) + { + var clone = new HttpRequestMessage(request.Method, request.RequestUri); + foreach (var header in request.Headers) + clone.Headers.TryAddWithoutValidation(header.Key, header.Value); + + if (request.Content != null) + { + var content = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false); + clone.Content = new ByteArrayContent(content); + if (request.Content.Headers.ContentType != null) + clone.Content.Headers.ContentType = request.Content.Headers.ContentType; + } + + return clone; + } + + internal static T Deserialize(string json) => + JsonSerializer.Deserialize(json, JsonOptions) + ?? throw new InvalidOperationException("Deserialization returned null"); + + internal static string Serialize(T value) => + JsonSerializer.Serialize(value, JsonOptions); + + internal static string EnumToApiString(T value) where T : struct, Enum => + JsonSerializer.Serialize(value, JsonOptions).Trim('"'); +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/cs/examples.json b/packages/generator/tests/union-no-discriminator/snapshots/cs/examples.json new file mode 100644 index 000000000..10bab0683 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/cs/examples.json @@ -0,0 +1,12 @@ +{ + "Client_Init": { + "usage": "using var client = new PachcaClient(\"YOUR_TOKEN\");", + "imports": [ + "PachcaClient" + ] + }, + "getEvents": { + "usage": "var response = await client.Events.GetEventsAsync();", + "output": "GetEventsResponse(Data: List)" + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/go/client.go b/packages/generator/tests/union-no-discriminator/snapshots/go/client.go new file mode 100644 index 000000000..c16844918 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/go/client.go @@ -0,0 +1,130 @@ +package pachca + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "time" +) + +type authTransport struct { + token string + base http.RoundTripper +} + +func (t *authTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Set("Authorization", "Bearer "+t.token) + return t.base.RoundTrip(req) +} + +type EventsService interface { + GetEvents(ctx context.Context) (*GetEventsResponse, error) +} + +type EventsServiceStub struct{} + +func (s *EventsServiceStub) GetEvents(ctx context.Context) (*GetEventsResponse, error) { + return nil, NotImplementedError{Method: "Events.getEvents"} +} + +type EventsServiceImpl struct { + baseURL string + client *http.Client +} + +func (s *EventsServiceImpl) GetEvents(ctx context.Context) (*GetEventsResponse, error) { + req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/events", s.baseURL), nil) + if err != nil { + return nil, err + } + resp, err := doWithRetry(s.client, req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + switch resp.StatusCode { + case http.StatusOK: + var result GetEventsResponse + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return nil, err + } + return &result, nil + default: + return nil, fmt.Errorf("unexpected status code: %d", resp.StatusCode) + } +} + +type PachcaClient struct { + Events EventsService +} + +type clientConfig struct { + baseURL string + events EventsService +} + +type ClientOption func(*clientConfig) + +type stubClientConfig struct { + events EventsService +} + +type StubClientOption func(*stubClientConfig) + +func WithBaseURL(baseURL string) ClientOption { + return func(cfg *clientConfig) { cfg.baseURL = baseURL } +} + +func WithEvents(service EventsService) ClientOption { + return func(cfg *clientConfig) { cfg.events = service } +} + +func WithStubEvents(service EventsService) StubClientOption { + return func(cfg *stubClientConfig) { cfg.events = service } +} + +func NewPachcaClient(token string, opts ...ClientOption) *PachcaClient { + cfg := clientConfig{} + for _, opt := range opts { + opt(&cfg) + } + client := &http.Client{ + Transport: &authTransport{token: token, base: http.DefaultTransport}, + } + var events EventsService = &EventsServiceImpl{baseURL: cfg.baseURL, client: client} + if cfg.events != nil { + events = cfg.events + } + return &PachcaClient{ + Events: events, + } +} + +func NewPachcaClientWithHTTP(baseURL string, client *http.Client, opts ...ClientOption) *PachcaClient { + cfg := clientConfig{baseURL: baseURL} + for _, opt := range opts { + opt(&cfg) + } + var events EventsService = &EventsServiceImpl{baseURL: cfg.baseURL, client: client} + if cfg.events != nil { + events = cfg.events + } + return &PachcaClient{ + Events: events, + } +} + +func NewStubPachcaClient(opts ...StubClientOption) *PachcaClient { + cfg := stubClientConfig{} + for _, opt := range opts { + opt(&cfg) + } + var events EventsService = &EventsServiceStub{} + if cfg.events != nil { + events = cfg.events + } + return &PachcaClient{ + Events: events, + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/go/examples.json b/packages/generator/tests/union-no-discriminator/snapshots/go/examples.json new file mode 100644 index 000000000..6fb0cc9cf --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/go/examples.json @@ -0,0 +1,12 @@ +{ + "Client_Init": { + "usage": "client := pachca.NewPachcaClient(\"YOUR_TOKEN\")", + "imports": [ + "PachcaClient" + ] + }, + "getEvents": { + "usage": "response, err := client.Events.GetEvents(ctx)", + "output": "GetEventsResponse{Data: []Event}" + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/go/types.go b/packages/generator/tests/union-no-discriminator/snapshots/go/types.go new file mode 100644 index 000000000..51a0a0334 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/go/types.go @@ -0,0 +1,125 @@ +package pachca + +import ( + "encoding/json" + "fmt" +) + +type DetailsEmpty struct { +} + +type DetailsChat struct { + ChatID int32 `json:"chat_id"` +} + +type DetailsCall struct { + ChatID int32 `json:"chat_id"` + Duration int32 `json:"duration"` + RecordingSize *int64 `json:"recording_size"` +} + +type DetailsRename struct { + OldName string `json:"old_name"` + NewName string `json:"new_name"` +} + +type Event struct { + ID int32 `json:"id"` + EventKey string `json:"event_key"` + Details EventDetailsUnion `json:"details"` +} + +// unionMemberShape lists the JSON keys one member of an undiscriminated union declares. +type unionMemberShape struct { + keys map[string]struct{} +} + +// pickUnionMember selects the member that best fits the payload: most keys +// recognised, then fewest unrecognised, then fewest declared. Returns -1 when +// the payload is not a JSON object. +func pickUnionMember(data []byte, shapes []unionMemberShape) int { + var raw map[string]json.RawMessage + if err := json.Unmarshal(data, &raw); err != nil { + return -1 + } + best := -1 + bestMatched, bestUnknown, bestDeclared := 0, 0, 0 + for i, shape := range shapes { + matched := 0 + for k := range raw { + if _, ok := shape.keys[k]; ok { + matched++ + } + } + unknown := len(raw) - matched + declared := len(shape.keys) + better := best == -1 || + matched > bestMatched || + (matched == bestMatched && unknown < bestUnknown) || + (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared) + if better { + best, bestMatched, bestUnknown, bestDeclared = i, matched, unknown, declared + } + } + return best +} + +type EventDetailsUnion struct { + DetailsEmpty *DetailsEmpty + DetailsChat *DetailsChat + DetailsCall *DetailsCall + DetailsRename *DetailsRename + Raw json.RawMessage +} + +var eventDetailsUnionShapes = []unionMemberShape{ + {keys: map[string]struct{}{}}, + {keys: map[string]struct{}{"chat_id": {}}}, + {keys: map[string]struct{}{"chat_id": {}, "duration": {}, "recording_size": {}}}, + {keys: map[string]struct{}{"old_name": {}, "new_name": {}}}, +} + +// UnmarshalJSON decodes EventDetailsUnion, which carries no discriminator field: +// the member is chosen by which one best matches the payload keys. The raw +// payload is always kept in Raw so an unrecognised shape is never a decode error. +func (u *EventDetailsUnion) UnmarshalJSON(data []byte) error { + u.Raw = append(json.RawMessage(nil), data...) + switch pickUnionMember(data, eventDetailsUnionShapes) { + case 0: + u.DetailsEmpty = &DetailsEmpty{} + return json.Unmarshal(data, u.DetailsEmpty) + case 1: + u.DetailsChat = &DetailsChat{} + return json.Unmarshal(data, u.DetailsChat) + case 2: + u.DetailsCall = &DetailsCall{} + return json.Unmarshal(data, u.DetailsCall) + case 3: + u.DetailsRename = &DetailsRename{} + return json.Unmarshal(data, u.DetailsRename) + } + return nil +} + +func (u EventDetailsUnion) MarshalJSON() ([]byte, error) { + if u.DetailsEmpty != nil { + return json.Marshal(u.DetailsEmpty) + } + if u.DetailsChat != nil { + return json.Marshal(u.DetailsChat) + } + if u.DetailsCall != nil { + return json.Marshal(u.DetailsCall) + } + if u.DetailsRename != nil { + return json.Marshal(u.DetailsRename) + } + if len(u.Raw) > 0 { + return u.Raw, nil + } + return nil, fmt.Errorf("empty EventDetailsUnion") +} + +type GetEventsResponse struct { + Data []Event `json:"data"` +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/go/utils.go b/packages/generator/tests/union-no-discriminator/snapshots/go/utils.go new file mode 100644 index 000000000..f7f90bc08 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/go/utils.go @@ -0,0 +1,60 @@ +package pachca + +import ( + "math/rand" + "net/http" + "strconv" + "time" +) + +// Ptr returns a pointer to the given value. +func Ptr[T any](v T) *T { + return &v +} + +// NotImplementedError is returned by stub methods that have not been implemented. +type NotImplementedError struct { + Method string +} + +func (e NotImplementedError) Error() string { + return e.Method + " is not implemented" +} + +const maxRetries = 3 + +var retryable5xx = map[int]bool{500: true, 502: true, 503: true, 504: true} + +func jitter(d time.Duration) time.Duration { + return time.Duration(float64(d) * (0.5 + rand.Float64()*0.5)) +} + +func doWithRetry(client *http.Client, req *http.Request) (*http.Response, error) { + for attempt := 0; ; attempt++ { + if attempt > 0 && req.GetBody != nil { + req.Body, _ = req.GetBody() + } + resp, err := client.Do(req) + if err != nil { + return nil, err + } + if resp.StatusCode == http.StatusTooManyRequests && attempt < maxRetries { + resp.Body.Close() + delay := time.Duration(1< response.body() + else -> throw RuntimeException("Unexpected status code: ${response.status.value}") + } + } +} + +class PachcaClient private constructor( + private val _client: HttpClient?, + val events: EventsService +) : Closeable { + + companion object { + operator fun invoke( + token: String, + baseUrl: String, + events: EventsService? = null + ): PachcaClient { + val client = createClient(token) + return PachcaClient( + _client = client, + events = events ?: EventsServiceImpl(baseUrl, client) + ) + } + + fun stub( + events: EventsService = object : EventsService {} + ): PachcaClient = PachcaClient( + _client = null, + events = events + ) + + private fun createClient(token: String): HttpClient = HttpClient { + expectSuccess = false + install(ContentNegotiation) { json(Json { explicitNulls = false }) } + install(HttpRequestRetry) { + maxRetries = 3 + retryIf { _, response -> + response.status.value == 429 || response.status.value in setOf(500, 502, 503, 504) + } + delayMillis { retry -> + val retryAfter = response?.headers?.get("Retry-After")?.toLongOrNull() + if (retryAfter != null && response?.status?.value == 429) { + retryAfter * 1000L + } else { + val base = 10_000L * (1L shl retry) + val jitter = 0.5 + kotlin.random.Random.nextDouble() * 0.5 + (base * jitter).toLong() + } + } + } + defaultRequest { bearerAuth(token) } + } + } + + constructor( + client: HttpClient, + baseUrl: String, + events: EventsService? = null + ) : this( + _client = client, + events = events ?: EventsServiceImpl(baseUrl, client) + ) + + override fun close() { + _client?.close() + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/kt/Models.kt b/packages/generator/tests/union-no-discriminator/snapshots/kt/Models.kt new file mode 100644 index 000000000..18ad12314 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/kt/Models.kt @@ -0,0 +1,101 @@ +package com.pachca.sdk + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.buildClassSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonDecoder +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonEncoder +import kotlinx.serialization.json.decodeFromJsonElement +import kotlinx.serialization.json.jsonObject + +@Serializable(with = EventDetailsUnionSerializer::class) +sealed interface EventDetailsUnion + +// EventDetailsUnion carries no discriminator field: the member is chosen by which one +// best matches the payload keys (most recognised, then fewest unrecognised, +// then fewest declared). +object EventDetailsUnionSerializer : KSerializer { + override val descriptor = buildClassSerialDescriptor("EventDetailsUnion") + + private val shapes: List, (Json, JsonElement) -> EventDetailsUnion>> = listOf( + setOf() to { json, element -> json.decodeFromJsonElement(DetailsEmpty.serializer(), element) }, + setOf("chat_id") to { json, element -> json.decodeFromJsonElement(DetailsChat.serializer(), element) }, + setOf("chat_id", "duration", "recording_size") to { json, element -> json.decodeFromJsonElement(DetailsCall.serializer(), element) }, + setOf("old_name", "new_name") to { json, element -> json.decodeFromJsonElement(DetailsRename.serializer(), element) }, + ) + + override fun serialize(encoder: Encoder, value: EventDetailsUnion) { + val jsonEncoder = encoder as? JsonEncoder ?: error("EventDetailsUnionSerializer only supports JSON") + when (value) { + is DetailsEmpty -> jsonEncoder.encodeSerializableValue(DetailsEmpty.serializer(), value) + is DetailsChat -> jsonEncoder.encodeSerializableValue(DetailsChat.serializer(), value) + is DetailsCall -> jsonEncoder.encodeSerializableValue(DetailsCall.serializer(), value) + is DetailsRename -> jsonEncoder.encodeSerializableValue(DetailsRename.serializer(), value) + } + } + + override fun deserialize(decoder: Decoder): EventDetailsUnion { + val jsonDecoder = decoder as? JsonDecoder ?: error("EventDetailsUnionSerializer only supports JSON") + val element = jsonDecoder.decodeJsonElement() + val keys = element.jsonObject.keys + var best: Pair, (Json, JsonElement) -> EventDetailsUnion>? = null + var bestMatched = 0 + var bestUnknown = 0 + var bestDeclared = 0 + for (shape in shapes) { + val matched = keys.count { it in shape.first } + val unknown = keys.size - matched + val declared = shape.first.size + val better = best == null || + matched > bestMatched || + (matched == bestMatched && unknown < bestUnknown) || + (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared) + if (better) { + best = shape + bestMatched = matched + bestUnknown = unknown + bestDeclared = declared + } + } + val chosen = best ?: error("No EventDetailsUnion member matched the payload") + return chosen.second(jsonDecoder.json, element) + } +} + +@Serializable +class DetailsEmpty : EventDetailsUnion + +@Serializable +data class DetailsChat( + @SerialName("chat_id") val chatId: Int, +) : EventDetailsUnion + +@Serializable +data class DetailsCall( + @SerialName("chat_id") val chatId: Int, + val duration: Int, + @SerialName("recording_size") val recordingSize: Long? = null, +) : EventDetailsUnion + +@Serializable +data class DetailsRename( + @SerialName("old_name") val oldName: String, + @SerialName("new_name") val newName: String, +) : EventDetailsUnion + +@Serializable +data class Event( + val id: Int, + @SerialName("event_key") val eventKey: Any, + val details: EventDetailsUnion, +) + +@Serializable +data class GetEventsResponse( + val data: List, +) diff --git a/packages/generator/tests/union-no-discriminator/snapshots/kt/examples.json b/packages/generator/tests/union-no-discriminator/snapshots/kt/examples.json new file mode 100644 index 000000000..4ca19942d --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/kt/examples.json @@ -0,0 +1,12 @@ +{ + "Client_Init": { + "usage": "val client = PachcaClient(\"YOUR_TOKEN\")", + "imports": [ + "PachcaClient" + ] + }, + "getEvents": { + "usage": "val response = client.events.getEvents()", + "output": "GetEventsResponse(data: List)" + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/py/__init__.py b/packages/generator/tests/union-no-discriminator/snapshots/py/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/generator/tests/union-no-discriminator/snapshots/py/client.py b/packages/generator/tests/union-no-discriminator/snapshots/py/client.py new file mode 100644 index 000000000..9c4f2e5e7 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/py/client.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +import httpx + +from .models import GetEventsResponse +from .utils import deserialize, RetryTransport + +class EventsService: + async def get_events( + self) -> GetEventsResponse: + raise NotImplementedError("Events.getEvents is not implemented") + + +class EventsServiceImpl(EventsService): + def __init__(self, client: httpx.AsyncClient) -> None: + self._client = client + + async def get_events( + self) -> GetEventsResponse: + response = await self._client.get( + "/events", + ) + body = response.json() + match response.status_code: + case 200: + return deserialize(GetEventsResponse, body) + case _: + raise RuntimeError( + f"Unexpected status code: {response.status_code}" + ) + + +class PachcaClient: + def __init__(self, token: str, base_url: str, events: EventsService | None = None) -> None: + self._client = httpx.AsyncClient( + base_url=base_url, + headers={"Authorization": f"Bearer {token}"}, + transport=RetryTransport(httpx.AsyncHTTPTransport()), + ) + self.events: EventsService = events or EventsServiceImpl(self._client) + + async def close(self) -> None: + await self._client.aclose() + + @classmethod + def from_client( + cls, + client: httpx.AsyncClient, + events: EventsService | None = None, + ) -> "PachcaClient": + self = cls.__new__(cls) + self._client = client + self.events: EventsService = events or EventsServiceImpl(client) + return self + + @classmethod + def stub( + cls, + events: EventsService | None = None, + ) -> "PachcaClient": + self = cls.__new__(cls) + self._client = None + self.events = events or EventsService() + return self diff --git a/packages/generator/tests/union-no-discriminator/snapshots/py/examples.json b/packages/generator/tests/union-no-discriminator/snapshots/py/examples.json new file mode 100644 index 000000000..5893dcd8e --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/py/examples.json @@ -0,0 +1,12 @@ +{ + "Client_Init": { + "usage": "client = PachcaClient(\"YOUR_TOKEN\")", + "imports": [ + "PachcaClient" + ] + }, + "getEvents": { + "usage": "response = await client.events.get_events()", + "output": "GetEventsResponse(data: list[Event])" + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/py/models.py b/packages/generator/tests/union-no-discriminator/snapshots/py/models.py new file mode 100644 index 000000000..23aac4638 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/py/models.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import Union + +@dataclass +class DetailsEmpty: + pass + + +@dataclass +class DetailsChat: + chat_id: int + + +@dataclass +class DetailsCall: + chat_id: int + duration: int + recording_size: int | None = None + + +@dataclass +class DetailsRename: + old_name: str + new_name: str + + +@dataclass +class Event: + id: int + event_key: object + details: EventDetailsUnion + + +EventDetailsUnion = Union[DetailsEmpty, DetailsChat, DetailsCall, DetailsRename] + + +@dataclass +class GetEventsResponse: + data: list[Event] diff --git a/packages/generator/tests/union-no-discriminator/snapshots/py/utils.py b/packages/generator/tests/union-no-discriminator/snapshots/py/utils.py new file mode 100644 index 000000000..7d1db0d02 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/py/utils.py @@ -0,0 +1,186 @@ +from __future__ import annotations + +import dataclasses +import keyword +from dataclasses import asdict, fields +from datetime import datetime +from typing import Callable, Type, TypeVar, get_args, get_origin, get_type_hints + +import httpx + +T = TypeVar("T") + + +def _is_dataclass_type(tp: object) -> bool: + return isinstance(tp, type) and dataclasses.is_dataclass(tp) + + +def _resolve_type(tp: object) -> type | None: + """Extract a concrete dataclass type from Optional[X] or X | None.""" + origin = get_origin(tp) + if origin is list: + return None # lists are handled inline + args = get_args(tp) + for arg in args: + if _is_dataclass_type(arg): + return arg + if _is_dataclass_type(tp): + return tp + return None + + +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + +def _resolve_list_item_type(tp: object) -> object | None: + """Extract the item type from list[X].""" + origin = get_origin(tp) + if origin is list: + args = get_args(tp) + if args: + return args[0] + return None + + +CustomUnionDeserializer = Callable[[dict], object] + + +def _deserialize_instance(tp: object, value: object) -> object: + custom = _CUSTOM_UNION_DESERIALIZERS.get(tp) + if custom is not None and isinstance(value, dict): + return custom(value) + if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) + nested = _resolve_type(tp) + if nested is not None: + return _deserialize_dataclass(nested, value) + if isinstance(value, list): + item_tp = _resolve_list_item_type(tp) + if item_tp is not None: + return [_deserialize_instance(item_tp, item) for item in value] + if isinstance(value, str): + raw_tp = tp + if get_origin(tp) is not None: + for arg in get_args(tp): + if arg is not type(None): + raw_tp = arg + break + if raw_tp is datetime: + return datetime.fromisoformat(value) + return value + + +def _deserialize_dataclass(cls: Type[T], data: dict) -> T: + field_map = {f.name: f for f in fields(cls)} + hints = get_type_hints(cls) + norm = {k.replace("-", "_").lower(): v for k, v in data.items()} + kwargs = {} + for k, v in norm.items(): + if k not in field_map: + k = f"{k}_" + if k not in field_map: + continue + f = field_map[k] + kwargs[k] = _deserialize_instance(hints[f.name], v) + return cls(**kwargs) + +_CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { +} + +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + + +def deserialize(cls: Type[T], data: dict) -> T: + """Create a typed instance from a dict, recursively deserializing nested values.""" + return _deserialize_instance(cls, data) + + +def _strip_nones(val: object) -> object: + if isinstance(val, dict): + return { + (k[:-1] if k.endswith("_") and keyword.iskeyword(k[:-1]) else k): _strip_nones(v) + for k, v in val.items() if v is not None + } + if isinstance(val, list): + return [_strip_nones(v) for v in val] + if isinstance(val, datetime): + return val.isoformat() + return val + + +def serialize(obj: object) -> dict: + """Convert a dataclass to a dict, recursively omitting None values.""" + return _strip_nones(asdict(obj)) + + +_MAX_RETRIES = 3 +_RETRYABLE_5XX = {500, 502, 503, 504} + + +def _add_jitter(delay: float) -> float: + import random + return delay * (0.5 + random.random() * 0.5) + + +class RetryTransport(httpx.AsyncBaseTransport): + """Wraps an httpx transport with retry on 429 Too Many Requests and 5xx errors.""" + + def __init__(self, transport: httpx.AsyncBaseTransport, max_retries: int = _MAX_RETRIES) -> None: + self._transport = transport + self._max_retries = max_retries + + async def handle_async_request(self, request: httpx.Request) -> httpx.Response: + import asyncio + for attempt in range(self._max_retries + 1): + response = await self._transport.handle_async_request(request) + if response.status_code == 429 and attempt < self._max_retries: + retry_after = response.headers.get("retry-after") + delay = int(retry_after) if retry_after and retry_after.isdigit() else 2 ** attempt + await asyncio.sleep(_add_jitter(delay)) + continue + if response.status_code in _RETRYABLE_5XX and attempt < self._max_retries: + delay = attempt + 1 + await asyncio.sleep(_add_jitter(delay)) + continue + return response + return response # unreachable diff --git a/packages/generator/tests/union-no-discriminator/snapshots/swift/Client.swift b/packages/generator/tests/union-no-discriminator/snapshots/swift/Client.swift new file mode 100644 index 000000000..afcccaf44 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/swift/Client.swift @@ -0,0 +1,69 @@ +import Foundation +#if canImport(FoundationNetworking) +import FoundationNetworking +#endif + +private func pachcaNotImplemented(_ method: String) -> Error { + NSError(domain: "PachcaClient", code: 1, userInfo: [NSLocalizedDescriptionKey: method + " is not implemented"]) +} + +open class EventsService { + public init() {} + + open func getEvents() async throws -> GetEventsResponse { + throw pachcaNotImplemented("Events.getEvents") + } +} + +public final class EventsServiceImpl: EventsService { + let baseURL: String + let headers: [String: String] + let session: URLSession + + init(baseURL: String, headers: [String: String], session: URLSession = .shared) { + self.baseURL = baseURL + self.headers = headers + self.session = session + super.init() + } + + public override func getEvents() async throws -> GetEventsResponse { + var request = URLRequest(url: URL(string: "\(baseURL)/events")!) + headers.forEach { request.setValue($1, forHTTPHeaderField: $0) } + let (data, urlResponse) = try await dataWithRetry(session: session, for: request) + let statusCode = (urlResponse as! HTTPURLResponse).statusCode + switch statusCode { + case 200: + return try deserialize(GetEventsResponse.self, from: data) + default: + throw URLError(.badServerResponse) + } + } +} + +public struct PachcaClient { + public let events: EventsService + + private init(events: EventsService) { + self.events = events + } + + public init(token: String, baseURL: String, events: EventsService? = nil) { + let headers = ["Authorization": "Bearer \(token)"] + self.init( + events: events ?? EventsServiceImpl(baseURL: baseURL, headers: headers) + ) + } + + public init(baseURL: String, headers: [String: String], session: URLSession = .shared, events: EventsService? = nil) { + self.init( + events: events ?? EventsServiceImpl(baseURL: baseURL, headers: headers, session: session) + ) + } + + public static func stub(events: EventsService = EventsService()) -> PachcaClient { + PachcaClient( + events: events + ) + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/swift/Models.swift b/packages/generator/tests/union-no-discriminator/snapshots/swift/Models.swift new file mode 100644 index 000000000..8784a8821 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/swift/Models.swift @@ -0,0 +1,118 @@ +import Foundation +#if canImport(FoundationNetworking) +import FoundationNetworking +#endif + +public struct DetailsEmpty: Codable { +} + +public struct DetailsChat: Codable { + public let chatId: Int + + public init(chatId: Int) { + self.chatId = chatId + } + + enum CodingKeys: String, CodingKey { + case chatId = "chat_id" + } +} + +public struct DetailsCall: Codable { + public let chatId: Int + public let duration: Int + public let recordingSize: Int64? + + public init(chatId: Int, duration: Int, recordingSize: Int64? = nil) { + self.chatId = chatId + self.duration = duration + self.recordingSize = recordingSize + } + + enum CodingKeys: String, CodingKey { + case chatId = "chat_id" + case duration + case recordingSize = "recording_size" + } +} + +public struct DetailsRename: Codable { + public let oldName: String + public let newName: String + + public init(oldName: String, newName: String) { + self.oldName = oldName + self.newName = newName + } + + enum CodingKeys: String, CodingKey { + case oldName = "old_name" + case newName = "new_name" + } +} + +public struct Event: Codable { + public let id: Int + public let eventKey: String + public let details: EventDetailsUnion + + public init(id: Int, eventKey: String, details: EventDetailsUnion) { + self.id = id + self.eventKey = eventKey + self.details = details + } + + enum CodingKeys: String, CodingKey { + case id + case eventKey = "event_key" + case details + } +} + +public enum EventDetailsUnion: Codable { + case detailsEmpty(DetailsEmpty) + case detailsChat(DetailsChat) + case detailsCall(DetailsCall) + case detailsRename(DetailsRename) + + public init(from decoder: Decoder) throws { + // EventDetailsUnion carries no discriminator field: members are tried from most + // to least demanding, so the loosest one only wins when nothing else fits. + if let value = try? DetailsCall(from: decoder) { + self = .detailsCall(value) + return + } + if let value = try? DetailsRename(from: decoder) { + self = .detailsRename(value) + return + } + if let value = try? DetailsChat(from: decoder) { + self = .detailsChat(value) + return + } + if let value = try? DetailsEmpty(from: decoder) { + self = .detailsEmpty(value) + return + } + throw DecodingError.dataCorrupted( + DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "No EventDetailsUnion member matched the payload") + ) + } + + public func encode(to encoder: Encoder) throws { + switch self { + case .detailsEmpty(let value): + try value.encode(to: encoder) + case .detailsChat(let value): + try value.encode(to: encoder) + case .detailsCall(let value): + try value.encode(to: encoder) + case .detailsRename(let value): + try value.encode(to: encoder) + } + } +} + +public struct GetEventsResponse: Codable { + public let data: [Event] +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/swift/Utils.swift b/packages/generator/tests/union-no-discriminator/snapshots/swift/Utils.swift new file mode 100644 index 000000000..11593c56f --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/swift/Utils.swift @@ -0,0 +1,69 @@ +import Foundation +#if canImport(FoundationNetworking) +import FoundationNetworking +#endif + +let pachcaDecoder: JSONDecoder = { + let decoder = JSONDecoder() + return decoder +}() + +let pachcaEncoder: JSONEncoder = { + let encoder = JSONEncoder() + return encoder +}() + +func serialize(_ value: T) throws -> Data { + let data = try pachcaEncoder.encode(value) + let json = try JSONSerialization.jsonObject(with: data) + return try JSONSerialization.data(withJSONObject: stripNulls(json)) +} + +func deserialize(_ type: T.Type, from data: Data) throws -> T { + return try pachcaDecoder.decode(type, from: data) +} + +private let maxRetries = 3 +private let retryable5xx: Set = [500, 502, 503, 504] + +private func jitter(_ delay: UInt64) -> UInt64 { + return UInt64(Double(delay) * (0.5 + Double.random(in: 0..<0.5))) +} + +func dataWithRetry(session: URLSession, for request: URLRequest, delegate: (any URLSessionTaskDelegate)? = nil) async throws -> (Data, URLResponse) { + for attempt in 0...maxRetries { + let (data, response) = try await session.data(for: request, delegate: delegate) + if let http = response as? HTTPURLResponse { + if http.statusCode == 429, attempt < maxRetries { + let delay: UInt64 + if let ra = http.value(forHTTPHeaderField: "Retry-After"), let secs = UInt64(ra) { + delay = secs * 1_000_000_000 + } else { + delay = UInt64(pow(2.0, Double(attempt))) * 1_000_000_000 + } + try await _Concurrency.Task.sleep(nanoseconds: jitter(delay)) + continue + } + if retryable5xx.contains(http.statusCode), attempt < maxRetries { + let delay = UInt64(attempt + 1) * 1_000_000_000 + try await _Concurrency.Task.sleep(nanoseconds: jitter(delay)) + continue + } + } + return (data, response) + } + return try await session.data(for: request, delegate: delegate) // unreachable +} + +private func stripNulls(_ value: Any) -> Any { + if let dict = value as? [String: Any] { + return dict.compactMapValues { v -> Any? in + if v is NSNull { return nil } + return stripNulls(v) + } + } + if let arr = value as? [Any] { + return arr.map(stripNulls) + } + return value +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/swift/examples.json b/packages/generator/tests/union-no-discriminator/snapshots/swift/examples.json new file mode 100644 index 000000000..9ce288148 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/swift/examples.json @@ -0,0 +1,12 @@ +{ + "Client_Init": { + "usage": "let client = PachcaClient(token: \"YOUR_TOKEN\")", + "imports": [ + "PachcaClient" + ] + }, + "getEvents": { + "usage": "let response = try await client.events.getEvents()", + "output": "GetEventsResponse(data: [Event])" + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/ts/client.ts b/packages/generator/tests/union-no-discriminator/snapshots/ts/client.ts new file mode 100644 index 000000000..88226b141 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/ts/client.ts @@ -0,0 +1,56 @@ +import { GetEventsResponse } from "./types.js"; +import { deserialize, deserializeType, fetchWithRetry } from "./utils.js"; + +export class EventsService { + async getEvents(): Promise { + throw new Error("Events.getEvents is not implemented"); + } +} + +export class EventsServiceImpl extends EventsService { + constructor( + private baseUrl: string, + private headers: Record, + ) { + super(); + } + + async getEvents(): Promise { + const response = await fetchWithRetry(`${this.baseUrl}/events`, { + headers: this.headers, + }); + const body = await response.json(); + switch (response.status) { + case 200: + return deserialize(body) as GetEventsResponse; + default: + throw new Error(`HTTP ${response.status}: ${JSON.stringify(body)}`); + } + } +} + +export class PachcaClient { + readonly events: EventsService; + + constructor(token: string, baseUrl?: string); + constructor(config: { headers: Record; baseUrl?: string; events?: EventsService }); + constructor(tokenOrConfig: string | { headers: Record; baseUrl?: string; events?: EventsService }, baseUrl?: string) { + let resolvedHeaders: Record; + let resolvedBaseUrl: string; + if (typeof tokenOrConfig === 'string') { + resolvedHeaders = { Authorization: `Bearer ${tokenOrConfig}` }; + resolvedBaseUrl = baseUrl ?? ''; + this.events = new EventsServiceImpl(resolvedBaseUrl, resolvedHeaders); + } else { + resolvedHeaders = tokenOrConfig.headers; + resolvedBaseUrl = tokenOrConfig.baseUrl ?? ''; + this.events = tokenOrConfig.events ?? new EventsServiceImpl(resolvedBaseUrl, resolvedHeaders); + } + } + + static stub(overrides: { events?: EventsService } = {}): PachcaClient { + const client = Object.create(PachcaClient.prototype); + client.events = overrides.events ?? new EventsService(); + return client; + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/ts/examples.json b/packages/generator/tests/union-no-discriminator/snapshots/ts/examples.json new file mode 100644 index 000000000..101eb2b57 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/ts/examples.json @@ -0,0 +1,12 @@ +{ + "Client_Init": { + "usage": "const client = new PachcaClient(\"YOUR_TOKEN\")", + "imports": [ + "PachcaClient" + ] + }, + "getEvents": { + "usage": "const response = client.events.getEvents()", + "output": "GetEventsResponse({ data: Event[] })" + } +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/ts/types.ts b/packages/generator/tests/union-no-discriminator/snapshots/ts/types.ts new file mode 100644 index 000000000..fbb72ff72 --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/ts/types.ts @@ -0,0 +1,29 @@ +export interface DetailsEmpty { +} + +export interface DetailsChat { + chatId: number; +} + +export interface DetailsCall { + chatId: number; + duration: number; + recordingSize?: number | null; +} + +export interface DetailsRename { + oldName: string; + newName: string; +} + +export interface Event { + id: number; + eventKey: unknown; + details: EventDetailsUnion; +} + +export type EventDetailsUnion = DetailsEmpty | DetailsChat | DetailsCall | DetailsRename; + +export interface GetEventsResponse { + data: Event[]; +} diff --git a/packages/generator/tests/union-no-discriminator/snapshots/ts/utils.ts b/packages/generator/tests/union-no-discriminator/snapshots/ts/utils.ts new file mode 100644 index 000000000..35778d63c --- /dev/null +++ b/packages/generator/tests/union-no-discriminator/snapshots/ts/utils.ts @@ -0,0 +1,95 @@ +function snakeToCamel(str: string): string { + const camel = str.replace(/[-_]([a-zA-Z])/g, (_, c) => c.toUpperCase()); + return camel.charAt(0).toLowerCase() + camel.slice(1); +} + +function camelToSnake(str: string): string { + return str + .replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2") + .replace(/([a-z0-9])([A-Z])/g, "$1_$2") + .toLowerCase(); +} + +function deserializeArray(obj: unknown, mapItem: (item: unknown) => unknown): unknown { + return Array.isArray(obj) ? obj.map(mapItem) : deserialize(obj); +} + +function serializeArray(obj: unknown, mapItem: (item: unknown) => unknown): unknown { + return Array.isArray(obj) ? obj.map(mapItem) : serialize(obj); +} + +function deserializeRecordWith(obj: unknown, mapValue: (value: unknown) => unknown): unknown { + if (obj !== null && typeof obj === "object" && !Array.isArray(obj)) { + return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, mapValue(v)])); + } + return deserialize(obj); +} + +function serializeRecordWith(obj: unknown, mapValue: (value: unknown) => unknown): unknown { + if (obj !== null && typeof obj === "object" && !Array.isArray(obj)) { + return Object.fromEntries( + Object.entries(obj) + .filter(([, v]) => v !== undefined) + .map(([k, v]) => [k, mapValue(v)]), + ); + } + return serialize(obj); +} + +export function deserialize(obj: unknown): unknown { + if (Array.isArray(obj)) return obj.map(deserialize); + if (obj !== null && typeof obj === "object") { + return Object.fromEntries( + Object.entries(obj).map(([k, v]) => [snakeToCamel(k), deserialize(v)]), + ); + } + return obj; +} + +export function serialize(obj: unknown): unknown { + if (Array.isArray(obj)) return obj.map(serialize); + if (obj !== null && typeof obj === "object") { + return Object.fromEntries( + Object.entries(obj) + .filter(([, v]) => v !== undefined) + .map(([k, v]) => [camelToSnake(k), serialize(v)]), + ); + } + return obj; +} + +const TYPE_DESERIALIZERS: Record unknown> = { +}; + +export function deserializeType(type: string, obj: unknown): unknown { + return (TYPE_DESERIALIZERS[type] ?? deserialize)(obj); +} + +export function serializeType(_type: string, obj: unknown): unknown { + return serialize(obj); +} + +const MAX_RETRIES = 3; +const RETRYABLE_5XX = new Set([500, 502, 503, 504]); + +function jitter(delay: number): number { + return delay * (0.5 + Math.random() * 0.5); +} + +export async function fetchWithRetry(input: RequestInfo | URL, init?: RequestInit): Promise { + for (let attempt = 0; ; attempt++) { + const response = await fetch(input, init); + if (response.status === 429 && attempt < MAX_RETRIES) { + const retryAfter = response.headers.get("retry-after"); + const delay = retryAfter ? Number(retryAfter) * 1000 : 1000 * Math.pow(2, attempt); + await new Promise((r) => setTimeout(r, jitter(delay))); + continue; + } + if (RETRYABLE_5XX.has(response.status) && attempt < MAX_RETRIES) { + const delay = 1000 * (attempt + 1); + await new Promise((r) => setTimeout(r, jitter(delay))); + continue; + } + return response; + } +} diff --git a/packages/generator/tests/unwrap/snapshots/py/utils.py b/packages/generator/tests/unwrap/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/unwrap/snapshots/py/utils.py +++ b/packages/generator/tests/unwrap/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/upload/snapshots/py/utils.py b/packages/generator/tests/upload/snapshots/py/utils.py index 78c22882d..7d1db0d02 100644 --- a/packages/generator/tests/upload/snapshots/py/utils.py +++ b/packages/generator/tests/upload/snapshots/py/utils.py @@ -29,6 +29,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +76,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +124,11 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/generator/tests/webhook-polling/snapshots/py/utils.py b/packages/generator/tests/webhook-polling/snapshots/py/utils.py index 78c22882d..e4945eac3 100644 --- a/packages/generator/tests/webhook-polling/snapshots/py/utils.py +++ b/packages/generator/tests/webhook-polling/snapshots/py/utils.py @@ -8,6 +8,12 @@ import httpx +from .models import ( + MessageWebhookPayload, + ReactionWebhookPayload, + WebhookPayloadUnion, +) + T = TypeVar("T") @@ -29,6 +35,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -47,6 +82,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -83,6 +130,12 @@ def _deserialize_dataclass(cls: Type[T], data: dict) -> T: _CUSTOM_UNION_DESERIALIZERS: dict[object, CustomUnionDeserializer] = { } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { + WebhookPayloadUnion: ("type", {"message_new": MessageWebhookPayload, "reaction_added": ReactionWebhookPayload}), +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/packages/openapi-parser/src/schema-parser.ts b/packages/openapi-parser/src/schema-parser.ts index f955c75b6..1e2fb8afc 100644 --- a/packages/openapi-parser/src/schema-parser.ts +++ b/packages/openapi-parser/src/schema-parser.ts @@ -14,9 +14,21 @@ function normalizeEnumDescriptions( const keys = Object.keys(descriptions); // Fast path: if first key already matches an enum value, no normalization needed if (keys.length > 0 && enumValues.includes(keys[0])) return descriptions; - // Build a lookup: underscored enum value -> original enum value + // Build a lookup: underscored enum value -> original enum value. + // The mapping is lossy — `a:b` and `a_b` both normalize to `a_b` — so an + // ambiguous key is left alone rather than silently re-attributed to whichever + // value happened to be inserted last. const normalized: Record = {}; - const valueByUnderscore = new Map(enumValues.map((v) => [v.replace(/:/g, '_'), v])); + const valueByUnderscore = new Map(); + for (const v of enumValues) { + const key = v.replace(/:/g, '_'); + if (key === v) continue; // no normalization needed for this value + if (valueByUnderscore.has(key) || enumValues.includes(key)) { + valueByUnderscore.delete(key); + continue; + } + valueByUnderscore.set(key, v); + } for (const [key, desc] of Object.entries(descriptions)) { const enumValue = valueByUnderscore.get(key); normalized[enumValue ?? key] = desc; diff --git a/packages/spec/openapi.en.yaml b/packages/spec/openapi.en.yaml index 9247fcc42..a1beaeb24 100644 --- a/packages/spec/openapi.en.yaml +++ b/packages/spec/openapi.en.yaml @@ -36,18 +36,18 @@ paths: schema: type: string format: date-time - example: '2025-05-01T09:11:00Z' - example: '2025-05-01T09:11:00Z' + example: '2025-05-01T09:11:00.000Z' + example: '2025-05-01T09:11:00.000Z' explode: false - name: end_time in: query required: false - description: End timestamp (exclusive) + description: End timestamp (inclusive) schema: type: string format: date-time - example: '2025-05-02T09:11:00Z' - example: '2025-05-02T09:11:00Z' + example: '2025-05-02T09:11:00.000Z' + example: '2025-05-02T09:11:00.000Z' explode: false - name: event_key in: query @@ -3531,10 +3531,16 @@ paths: /profile/status: get: operationId: ProfileOperations_getStatus - description: |- + description: >- Own status - Retrieve information about your current status. + + Method for retrieving information about your own status. + + + If no status is set, the method returns `200` and `null` in the response body — with no wrapper object. A status + whose `expires_at` has passed may still be returned for a short time until it is cleared, so check `expires_at` + on the client side. parameters: [] responses: '200': @@ -3547,11 +3553,9 @@ paths: - data properties: data: - type: object - allOf: - - $ref: '#/components/schemas/UserStatus' - nullable: true + $ref: '#/components/schemas/UserStatus' description: Response wrapper with data + nullable: true '401': description: Access is unauthorized. content: @@ -5195,10 +5199,16 @@ paths: /users/{user_id}/status: get: operationId: UserStatusOperations_getUserStatus - description: |- + description: >- Employee status - Retrieve information about an employee's status. + + Method for retrieving information about an employee's status. + + + If no status is set, the method returns `200` and `null` in the response body — with no wrapper object. A status + whose `expires_at` has passed may still be returned for a short time until it is cleared, so check `expires_at` + on the client side. parameters: - name: user_id in: path @@ -5220,11 +5230,9 @@ paths: - data properties: data: - type: object - allOf: - - $ref: '#/components/schemas/UserStatus' - nullable: true + $ref: '#/components/schemas/UserStatus' description: Response wrapper with data + nullable: true '401': description: Access is unauthorized. content: @@ -5589,7 +5597,7 @@ components: name: type: string nullable: true - description: User-defined token name + description: User-defined token name. `null` for a bot token — a name is only set when a token is created manually. example: My API Token user_id: type: integer @@ -5613,19 +5621,21 @@ components: type: string format: date-time nullable: true - description: Token revocation date + description: 'Token revocation date. Always `null`: the method returns 401 for a revoked token.' example: null expires_in: type: integer format: int32 nullable: true - description: Token lifetime in seconds + description: Token lifetime in seconds. Always `null` — tokens are issued without expiry. example: null last_used_at: type: string format: date-time nullable: true - description: Token last used date + description: >- + Token last used date. `null` until the token has been used at least once. Updated at most once per hour, so + it may lag behind. example: '2025-02-24T14:20:00.000Z' description: Access token AddMembersRequest: @@ -5690,7 +5700,7 @@ components: value: type: string nullable: true - description: Field value that caused the error + description: Field value that caused the error. `null` if the error does not relate to a specific value. example: invalid_value message: type: string @@ -5706,8 +5716,9 @@ components: additionalProperties: {} nullable: true description: >- - Additional error data. Content depends on the error code: `{id: number}` for custom property errors, `{type: - string}` for type mismatch errors + Additional error data. Content depends on the error code: `{id: number}` — for custom property errors + (property ID), `{record: {type: string, id: number}, query: string}` — for authorization errors. In most + cases `null`. example: null description: Detailed error information AuditDetailsBotScopes: @@ -5737,7 +5748,7 @@ components: additionalProperties: {} description: >- Changed webhook settings. The key is the setting name (outgoing_url, ignore_self_messages, - events_history_enabled), the value is an object with previous and new fields + events_history_enabled), the value is an object with previous and new fields. description: 'For: bot_webhook_settings_updated' AuditDetailsChatId: type: object @@ -5814,7 +5825,7 @@ components: description: >- Empty details. For: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, - thread_created, audit_events_accessed + thread_created, audit_events_accessed. AuditDetailsInitiator: type: object required: @@ -5899,7 +5910,7 @@ components: additionalProperties: {} description: >- Applied filters. Possible keys depend on the search type: order, sort, created_from, created_to, - company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages) + company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages). description: 'For: search_users_api, search_chats_api, search_messages_api' AuditDetailsTagChat: type: object @@ -6035,7 +6046,7 @@ components: - $ref: '#/components/schemas/AuditEventDetailsUnion' description: >- Additional event details. Structure depends on the event_key value — see event_key field value descriptions. - For events without details, an empty object is returned + For events without details, an empty object is returned. ip_address: type: string description: IP address from which the action was performed @@ -6065,7 +6076,7 @@ components: - $ref: '#/components/schemas/AuditDetailsBotWebhookSettings' - $ref: '#/components/schemas/AuditDetailsVideoCall' - $ref: '#/components/schemas/AuditDetailsVideoCallRecording' - description: Additional audit event details. Structure depends on the event_key value + description: Additional audit event details. Structure depends on the event_key value. AuditEventKey: type: string enum: @@ -6223,7 +6234,10 @@ components: type: array items: type: string - description: Bot token scopes (permissions). If omitted, the bot receives the default set. + description: >- + Bot token scopes (permissions). If omitted, the bot receives the default set. Not every scope is + available to a bot: some are allowed only for user roles, and attempting to assign such a scope returns + `400`. The service values `bot` and `all` cannot be assigned. example: - messages:create template: @@ -6431,7 +6445,10 @@ components: type: array items: type: string - description: Bot token scopes (permissions). If omitted, the bot receives the default set. + description: >- + Bot token scopes (permissions). If omitted, the bot receives the default set. Not every scope is + available to a bot: some are allowed only for user roles, and attempting to assign such a scope returns + `400`. The service values `bot` and `all` cannot be assigned. example: - messages:create template: @@ -6513,7 +6530,7 @@ components: outgoing_url: type: string nullable: true - description: Outgoing webhook URL + description: Outgoing webhook URL. `null` if the bot has no outgoing webhook configured. example: https://www.website.com/tasks/new events: type: array @@ -6538,7 +6555,9 @@ components: type: array items: type: string - description: Bot token scopes (permissions) + description: >- + Bot token scopes (permissions). The default set is broader than what can be assigned explicitly, so values + that cannot be set explicitly may appear here. example: - messages:create template: @@ -6673,7 +6692,7 @@ components: example: 1245817 trigger_id: type: string - description: Unique event identifier. Lifetime — 3 seconds. Can be used, for example, to open a view for the user + description: Unique event identifier. Lifetime — 3 seconds. Can be used, for example, to open a view for the user. example: a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14 data: type: string @@ -6882,7 +6901,7 @@ components: type: integer format: int32 nullable: true - description: Thread ID + description: Thread ID. `null` if the members were added to a regular chat or channel rather than a thread. example: 5678 user_ids: type: array @@ -7008,6 +7027,7 @@ components: example: string value: type: string + nullable: true maxLength: 768 description: Custom property value example: Saint Petersburg @@ -7119,13 +7139,17 @@ components: type: integer format: int32 nullable: true - description: Image width in pixels + description: >- + Image width in pixels. `null` for files that are not images, and if the size was not supplied at upload + time. example: 1920 height: type: integer format: int32 nullable: true - description: Image height in pixels + description: >- + Image height in pixels. `null` for files that are not images, and if the size was not supplied at upload + time. example: 1080 description: File FileType: @@ -7231,13 +7255,17 @@ components: type: integer format: int32 nullable: true - description: ID of the message that the thread containing the original message was created for + description: >- + ID of the message that the thread containing the original message was created for. `null` if the original + message was not in a thread, or the thread was created without being linked to a message. example: null original_thread_parent_chat_id: type: integer format: int32 nullable: true - description: ID of the chat of the message that the thread containing the original message was created for + description: >- + ID of the chat of the message that the thread containing the original message was created for. `null` if the + original message was not in a thread, or the thread was created without being linked to a message. example: null description: Forwarded message information GroupTag: @@ -7336,7 +7364,7 @@ components: type: object additionalProperties: $ref: '#/components/schemas/LinkPreview' - description: '`JSON` map of link previews, where each key is a `URL` received in the outgoing webhook about a new message.' + description: '`JSON` map of link previews, where each key is a `URL` received in the outgoing webhook about a new message' x-record-key-example: https://website.com/articles/123 description: Link unfurling request LinkSharedWebhookPayload: @@ -7425,8 +7453,6 @@ components: - thread - forwarding - parent_message_id - - display_avatar_url - - display_name - changed_at - deleted_at properties: @@ -7493,7 +7519,7 @@ components: items: $ref: '#/components/schemas/Button' nullable: true - description: Array of rows, each represented as an array of buttons + description: Array of rows, each represented as an array of buttons. `null` if the message was sent without buttons. thread: type: object properties: @@ -7511,40 +7537,50 @@ components: - id - chat_id nullable: true - description: Message thread + description: >- + Thread created for this message. `null` if no thread was created, and for messages that are themselves + inside a thread. forwarding: type: object allOf: - $ref: '#/components/schemas/Forwarding' nullable: true - description: Forwarded message information + description: Forwarded message information. `null` if the message is not a forwarded one. parent_message_id: type: integer format: int32 nullable: true - description: ID of the message being replied to + description: ID of the message being replied to. `null` if the message is not a reply to another message. example: null display_avatar_url: type: string nullable: true - description: Message sender avatar URL + description: >- + Message sender avatar URL. The field is present only on messages from bots; it is absent from the response + for messages from employees. `null` if the bot did not override the value when sending. example: null display_name: type: string nullable: true - description: Message sender full name + description: >- + Message sender full name. The field is present only on messages from bots; it is absent from the response + for messages from employees. `null` if the bot did not override the value when sending. example: null changed_at: type: string format: date-time nullable: true - description: Message last edit date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: >- + Message last change date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. For a message that + was never edited it equals the creation date. `null` for messages sent before this field was introduced. example: '2021-08-28T16:10:00.000Z' deleted_at: type: string format: date-time nullable: true - description: Message deletion date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: >- + Message deletion date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` for messages + that are not deleted. Deleted messages are not returned in the message list. example: null description: Message MessageCreateRequest: @@ -7854,14 +7890,16 @@ components: type: integer format: int32 nullable: true - description: ID of the message being replied to + description: ID of the message being replied to. `null` if the message is not a reply to another message. example: 3456 thread: type: object allOf: - $ref: '#/components/schemas/WebhookMessageThread' nullable: true - description: Thread parameters object + description: >- + The thread the message was sent in. `null` if the message was not sent in a thread. Unlike the `thread` + field on the REST API message object, this describes the thread the message is inside of. webhook_timestamp: type: integer format: int32 @@ -8260,7 +8298,7 @@ components: description: >- Optional identifier for recognizing this view, which will be sent to your application when the user submits the form. Use this field, for example, to determine which form the user was supposed to fill out. - example: timeoff_reguest_form + example: timeoff_request_form view: type: object properties: @@ -8344,7 +8382,6 @@ components: example: 👍 name: type: string - nullable: true description: Reaction emoji name example: ':+1::skin-tone-1:' description: Message reaction @@ -8564,7 +8601,7 @@ components: type: string format: date-time nullable: true - description: Task due date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: Task due date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` if no due date is set. example: '2020-06-05T09:00:00.000Z' priority: type: integer @@ -8580,7 +8617,7 @@ components: type: integer format: int32 nullable: true - description: ID of the chat the task is linked to + description: ID of the chat the task is linked to. `null` if the task is not linked to a chat. example: 334 status: allOf: @@ -8637,7 +8674,7 @@ components: priority: type: integer format: int32 - description: 'Priority: 1, 2 (important), or 3 (very important).' + description: 'Priority: 1, 2 (important), or 3 (very important)' example: 2 default: 1 performer_ids: @@ -8732,7 +8769,7 @@ components: priority: type: integer format: int32 - description: 'Priority: 1, 2 (important), or 3 (very important).' + description: 'Priority: 1, 2 (important), or 3 (very important)' example: 2 performer_ids: type: array @@ -8909,14 +8946,15 @@ components: example: 12 first_name: type: string + nullable: true maxLength: 255 - description: First name + description: First name. Returns `null` until an invited employee completes registration (`invite_status` of `sent`). example: Oleg last_name: type: string nullable: true maxLength: 255 - description: Last name + description: Last name. If not filled in, `null` or an empty string is returned. example: Petrov nickname: type: string @@ -8943,12 +8981,12 @@ components: type: string nullable: true maxLength: 255 - description: Department + description: Department. If not specified, `null` or an empty string is returned. example: Product title: type: string nullable: true - description: Job title + description: Job title. If not specified, `null` or an empty string is returned. example: CIO role: allOf: @@ -8990,7 +9028,7 @@ components: allOf: - $ref: '#/components/schemas/UserStatus' nullable: true - description: Status + description: Status. `null` if the employee has no status set. bot: type: boolean description: Whether this is a bot @@ -9008,18 +9046,22 @@ components: type: string format: date-time nullable: true - description: User last activity date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: >- + User last activity date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` if the employee has + never signed in to Pachca — in that case `invite_status` returns `sent`. example: '2025-01-20T13:40:07.000Z' time_zone: type: string nullable: true maxLength: 32 - description: User time zone + description: >- + User time zone. `null` if the employee has not set a personal time zone — the company time zone applies + then. example: Europe/Moscow image_url: type: string nullable: true - description: User avatar download URL + description: User avatar download URL. `null` if no avatar is uploaded. example: https://app.pachca.com/users/12/photo.jpg description: Employee UserCreateRequest: @@ -9201,7 +9243,9 @@ components: type: string format: date-time nullable: true - description: Status expiration date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: >- + Status expiration date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` if no + expiration is set — such a status is not cleared automatically. example: '2024-04-08T10:00:00.000Z' is_away: type: boolean @@ -9220,7 +9264,7 @@ components: nullable: true description: >- "Away" mode message. Displayed in the user profile, as well as when sending a direct message or mentioning - them in a chat. + them in a chat. `null` if the auto-reply text is not set. description: User status UserUpdateRequest: type: object @@ -9679,7 +9723,7 @@ components: format: int32 minimum: 1 maximum: 10 - description: Maximum number of files the user can upload to this field. + description: Maximum number of files the user can upload to this field example: 1 default: 10 required: @@ -10039,13 +10083,13 @@ components: callback_id: type: string nullable: true - description: Callback ID specified when opening the view + description: Callback ID specified when opening the view. `null` if it was not specified when the form was opened. example: timeoff_request_form private_metadata: type: string nullable: true - description: Private metadata specified when opening the view - example: '{''timeoff_id'':4378}' + description: Private metadata specified when opening the view. `null` if it was not specified when the form was opened. + example: '{"timeoff_id":4378}' chat_id: type: integer format: int32 @@ -10065,7 +10109,7 @@ components: data: type: object additionalProperties: {} - description: Submitted view field data. Key — field `action_id`, value — entered data + description: Submitted view field data. Key — field `action_id`, value — entered data. webhook_timestamp: type: integer format: int32 diff --git a/packages/spec/openapi.yaml b/packages/spec/openapi.yaml index ba2ae2137..6dc8bc876 100644 --- a/packages/spec/openapi.yaml +++ b/packages/spec/openapi.yaml @@ -36,18 +36,18 @@ paths: schema: type: string format: date-time - example: '2025-05-01T09:11:00Z' - example: '2025-05-01T09:11:00Z' + example: '2025-05-01T09:11:00.000Z' + example: '2025-05-01T09:11:00.000Z' explode: false - name: end_time in: query required: false - description: Конечная метка времени (исключительно) + description: Конечная метка времени (включительно) schema: type: string format: date-time - example: '2025-05-02T09:11:00Z' - example: '2025-05-02T09:11:00Z' + example: '2025-05-02T09:11:00.000Z' + example: '2025-05-02T09:11:00.000Z' explode: false - name: event_key in: query @@ -3438,6 +3438,8 @@ paths: Свой статус Метод для получения информации о своем статусе. + + Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. parameters: [] responses: '200': @@ -3450,11 +3452,9 @@ paths: - data properties: data: - type: object - allOf: - - $ref: '#/components/schemas/UserStatus' - nullable: true + $ref: '#/components/schemas/UserStatus' description: Обертка ответа с данными + nullable: true '401': description: Access is unauthorized. content: @@ -5066,6 +5066,8 @@ paths: Статус сотрудника Метод для получения информации о статусе сотрудника. + + Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. parameters: - name: user_id in: path @@ -5087,11 +5089,9 @@ paths: - data properties: data: - type: object - allOf: - - $ref: '#/components/schemas/UserStatus' - nullable: true + $ref: '#/components/schemas/UserStatus' description: Обертка ответа с данными + nullable: true '401': description: Access is unauthorized. content: @@ -5450,7 +5450,7 @@ components: name: type: string nullable: true - description: Пользовательское имя токена + description: Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную. example: Мой API токен user_id: type: integer @@ -5474,19 +5474,19 @@ components: type: string format: date-time nullable: true - description: Дата отзыва токена + description: 'Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401.' example: null expires_in: type: integer format: int32 nullable: true - description: Время жизни токена в секундах + description: Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно. example: null last_used_at: type: string format: date-time nullable: true - description: Дата последнего использования токена + description: Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать. example: '2025-02-24T14:20:00.000Z' description: Токен доступа AddMembersRequest: @@ -5551,7 +5551,7 @@ components: value: type: string nullable: true - description: Значение поля, которое вызвало ошибку + description: Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению. example: invalid_value message: type: string @@ -5566,7 +5566,7 @@ components: type: object additionalProperties: {} nullable: true - description: 'Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`' + description: 'Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.' example: null description: Детальная информация об ошибке AuditDetailsBotScopes: @@ -5594,7 +5594,7 @@ components: changes: type: object additionalProperties: {} - description: Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение) + description: Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение). description: 'При: bot_webhook_settings_updated' AuditDetailsChatId: type: object @@ -5668,7 +5668,7 @@ components: description: 'При: dlp_violation_detected' AuditDetailsEmpty: type: object - description: 'Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted' + description: 'Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted.' AuditDetailsInitiator: type: object required: @@ -5751,7 +5751,7 @@ components: filters: type: object additionalProperties: {} - description: 'Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages)' + description: 'Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages).' description: 'При: search_users_api, search_chats_api, search_messages_api' AuditDetailsTagChat: type: object @@ -5885,7 +5885,7 @@ components: details: allOf: - $ref: '#/components/schemas/AuditEventDetailsUnion' - description: Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект + description: Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект. ip_address: type: string description: IP-адрес, с которого было выполнено действие @@ -5915,7 +5915,7 @@ components: - $ref: '#/components/schemas/AuditDetailsBotWebhookSettings' - $ref: '#/components/schemas/AuditDetailsVideoCall' - $ref: '#/components/schemas/AuditDetailsVideoCallRecording' - description: Дополнительные детали события аудита. Структура зависит от значения event_key + description: Дополнительные детали события аудита. Структура зависит от значения event_key. AuditEventKey: type: string enum: @@ -6071,7 +6071,7 @@ components: type: array items: type: string - description: Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. + description: 'Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.' example: - messages:create template: @@ -6270,7 +6270,7 @@ components: type: array items: type: string - description: Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. + description: 'Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.' example: - messages:create template: @@ -6350,7 +6350,7 @@ components: outgoing_url: type: string nullable: true - description: URL исходящего вебхука + description: URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен. example: https://www.website.com/tasks/new events: type: array @@ -6375,7 +6375,7 @@ components: type: array items: type: string - description: Скоупы (права доступа) токена бота + description: Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки. example: - messages:create template: @@ -6506,7 +6506,7 @@ components: example: 1245817 trigger_id: type: string - description: Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю + description: Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю. example: a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14 data: type: string @@ -6715,7 +6715,7 @@ components: type: integer format: int32 nullable: true - description: Идентификатор треда + description: Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред. example: 5678 user_ids: type: array @@ -6841,8 +6841,9 @@ components: example: string value: type: string + nullable: true maxLength: 768 - description: Значение + description: Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601. example: Санкт-Петербург description: Дополнительное поле CustomPropertyDataType: @@ -6951,13 +6952,13 @@ components: type: integer format: int32 nullable: true - description: Ширина изображения в пикселях + description: Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. example: 1920 height: type: integer format: int32 nullable: true - description: Высота изображения в пикселях + description: Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке. example: 1080 description: Файл FileType: @@ -7055,13 +7056,13 @@ components: type: integer format: int32 nullable: true - description: Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение + description: Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. example: null original_thread_parent_chat_id: type: integer format: int32 nullable: true - description: Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение + description: Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению. example: null description: Информация о пересланном сообщении GroupTag: @@ -7160,7 +7161,7 @@ components: type: object additionalProperties: $ref: '#/components/schemas/LinkPreview' - description: '`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.' + description: '`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении' x-record-key-example: https://website.com/articles/123 description: Запрос на разворачивание ссылок LinkSharedWebhookPayload: @@ -7249,8 +7250,6 @@ components: - thread - forwarding - parent_message_id - - display_avatar_url - - display_name - changed_at - deleted_at properties: @@ -7315,7 +7314,7 @@ components: items: $ref: '#/components/schemas/Button' nullable: true - description: Массив строк, каждая из которых представлена массивом кнопок + description: Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок. thread: type: object properties: @@ -7333,40 +7332,40 @@ components: - id - chat_id nullable: true - description: Тред сообщения + description: Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда. forwarding: type: object allOf: - $ref: '#/components/schemas/Forwarding' nullable: true - description: Информация о пересланном сообщении + description: Информация о пересланном сообщении. `null`, если сообщение не является пересланным. parent_message_id: type: integer format: int32 nullable: true - description: Идентификатор сообщения, к которому написан ответ + description: Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. example: null display_avatar_url: type: string nullable: true - description: Ссылка на аватарку отправителя сообщения + description: Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. example: null display_name: type: string nullable: true - description: Полное имя отправителя сообщения + description: Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке. example: null changed_at: type: string format: date-time nullable: true - description: Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ + description: Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля. example: '2021-08-28T16:10:00.000Z' deleted_at: type: string format: date-time nullable: true - description: Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ + description: Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются. example: null description: Сообщение MessageCreateRequest: @@ -7662,14 +7661,14 @@ components: type: integer format: int32 nullable: true - description: Идентификатор сообщения, к которому написан ответ + description: Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение. example: 3456 thread: type: object allOf: - $ref: '#/components/schemas/WebhookMessageThread' nullable: true - description: Объект с параметрами треда + description: Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение. webhook_timestamp: type: integer format: int32 @@ -8064,7 +8063,7 @@ components: type: string maxLength: 255 description: Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. - example: timeoff_reguest_form + example: timeoff_request_form view: type: object properties: @@ -8148,7 +8147,6 @@ components: example: 👍 name: type: string - nullable: true description: Название emoji реакции example: ':+1::skin-tone-1:' description: Реакция на сообщение @@ -8364,7 +8362,7 @@ components: type: string format: date-time nullable: true - description: Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ + description: Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан. example: '2020-06-05T09:00:00.000Z' priority: type: integer @@ -8380,7 +8378,7 @@ components: type: integer format: int32 nullable: true - description: Идентификатор чата, к которому привязано напоминание + description: Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату. example: 334 status: allOf: @@ -8435,7 +8433,7 @@ components: priority: type: integer format: int32 - description: 'Приоритет: 1, 2 (важно) или 3 (очень важно).' + description: 'Приоритет: 1, 2 (важно) или 3 (очень важно)' example: 2 default: 1 performer_ids: @@ -8528,7 +8526,7 @@ components: priority: type: integer format: int32 - description: 'Приоритет: 1, 2 (важно) или 3 (очень важно).' + description: 'Приоритет: 1, 2 (важно) или 3 (очень важно)' example: 2 performer_ids: type: array @@ -8702,14 +8700,15 @@ components: example: 12 first_name: type: string + nullable: true maxLength: 255 - description: Имя + description: Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`). example: Олег last_name: type: string nullable: true maxLength: 255 - description: Фамилия + description: Фамилия. Если не заполнена, возвращается `null` или пустая строка. example: Петров nickname: type: string @@ -8732,12 +8731,12 @@ components: type: string nullable: true maxLength: 255 - description: Департамент + description: Департамент. Если не указан, возвращается `null` или пустая строка. example: Продукт title: type: string nullable: true - description: Должность + description: Должность. Если не указана, возвращается `null` или пустая строка. example: CIO role: allOf: @@ -8777,7 +8776,7 @@ components: allOf: - $ref: '#/components/schemas/UserStatus' nullable: true - description: Статус + description: Статус. `null`, если у сотрудника не установлен статус. bot: type: boolean description: Является ботом @@ -8795,18 +8794,18 @@ components: type: string format: date-time nullable: true - description: Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ + description: Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`. example: '2025-01-20T13:40:07.000Z' time_zone: type: string nullable: true maxLength: 32 - description: Часовой пояс пользователя + description: Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании. example: Europe/Moscow image_url: type: string nullable: true - description: Ссылка на скачивание аватарки пользователя + description: Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена. example: https://app.pachca.com/users/12/photo.jpg description: Сотрудник UserCreateRequest: @@ -8980,7 +8979,7 @@ components: type: string format: date-time nullable: true - description: Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ + description: Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически. example: '2024-04-08T10:00:00.000Z' is_away: type: boolean @@ -8997,7 +8996,7 @@ components: required: - text nullable: true - description: Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. + description: Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан. description: Статус пользователя UserUpdateRequest: type: object @@ -9450,7 +9449,7 @@ components: format: int32 minimum: 1 maximum: 10 - description: Максимальное количество файлов, которое может загрузить пользователь в это поле. + description: Максимальное количество файлов, которое может загрузить пользователь в это поле example: 1 default: 10 required: @@ -9806,13 +9805,13 @@ components: callback_id: type: string nullable: true - description: Идентификатор обратного вызова, указанный при открытии представления + description: Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан. example: timeoff_request_form private_metadata: type: string nullable: true - description: Приватные метаданные, указанные при открытии представления - example: "{'timeoff_id':4378}" + description: Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны. + example: '{"timeoff_id":4378}' chat_id: type: integer format: int32 @@ -9827,7 +9826,7 @@ components: data: type: object additionalProperties: {} - description: Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные + description: Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные. webhook_timestamp: type: integer format: int32 @@ -9910,7 +9909,7 @@ components: example: example.com skip: type: boolean - description: Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью + description: Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью. example: false description: Объект ссылки в вебхуке разворачивания ссылок WebhookMessageThread: diff --git a/packages/spec/overlay.en.yaml b/packages/spec/overlay.en.yaml index e2f20946a..cf32fd600 100644 --- a/packages/spec/overlay.en.yaml +++ b/packages/spec/overlay.en.yaml @@ -14,7 +14,7 @@ actions: description: Start timestamp (inclusive) - target: $.paths['/audit_events'].get.parameters[?(@.name=='end_time')] update: - description: End timestamp (exclusive) + description: End timestamp (inclusive) - target: $.paths['/audit_events'].get.parameters[?(@.name=='event_key')] update: description: Filter by specific event type @@ -633,10 +633,7 @@ actions: Retrieve information about your own profile. - target: $.paths['/profile/status'].get update: - description: |- - Own status - - Retrieve information about your current status. + description: "Own status\n\nMethod for retrieving information about your own status.\n\nIf no status is set, the method returns `200` and `null` in the response body — with no wrapper object. A status whose `expires_at` has passed may still be returned for a short time until it is cleared, so check `expires_at` on the client side." - target: $.paths['/profile/status'].put update: description: |- @@ -959,10 +956,7 @@ actions: description: User ID - target: $.paths['/users/{user_id}/status'].get update: - description: |- - Employee status - - Retrieve information about an employee's status. + description: "Employee status\n\nMethod for retrieving information about an employee's status.\n\nIf no status is set, the method returns `200` and `null` in the response body — with no wrapper object. A status whose `expires_at` has passed may still be returned for a short time until it is cleared, so check `expires_at` on the client side." - target: $.paths['/users/{user_id}/status'].get.parameters[?(@.name=='user_id')] update: description: User ID @@ -1059,7 +1053,7 @@ actions: description: Masked token (first 8 and last 4 characters visible) - target: $.components.schemas.AccessTokenInfo.properties.name update: - description: User-defined token name + description: "User-defined token name. `null` for a bot token — a name is only set when a token is created manually." - target: $.components.schemas.AccessTokenInfo.properties.user_id update: description: Token owner ID @@ -1071,13 +1065,13 @@ actions: description: Token creation date - target: $.components.schemas.AccessTokenInfo.properties.revoked_at update: - description: Token revocation date + description: "Token revocation date. Always `null`: the method returns 401 for a revoked token." - target: $.components.schemas.AccessTokenInfo.properties.expires_in update: - description: Token lifetime in seconds + description: "Token lifetime in seconds. Always `null` — tokens are issued without expiry." - target: $.components.schemas.AccessTokenInfo.properties.last_used_at update: - description: Token last used date + description: "Token last used date. `null` until the token has been used at least once. Updated at most once per hour, so it may lag behind." - target: $.components.schemas.AddMembersRequest update: description: Request to add members to a chat @@ -1107,7 +1101,7 @@ actions: description: Error field key - target: $.components.schemas.ApiErrorItem.properties.value update: - description: Field value that caused the error + description: "Field value that caused the error. `null` if the error does not relate to a specific value." - target: $.components.schemas.ApiErrorItem.properties.message update: description: Error message @@ -1116,9 +1110,7 @@ actions: description: Error code - target: $.components.schemas.ApiErrorItem.properties.payload update: - description: >- - Additional error data. Content depends on the error code: `{id: number}` — for custom property errors (property - ID), `{record: {type: string, id: number}, query: string}` — for authorization errors. In most cases `null` + description: "Additional error data. Content depends on the error code: `{id: number}` — for custom property errors (property ID), `{record: {type: string, id: number}, query: string}` — for authorization errors. In most cases `null`." - target: $.components.schemas.AuditDetailsChatId update: description: 'For: tag_removed_from_chat' @@ -1166,10 +1158,7 @@ actions: description: Rule conditions check result (true — conditions matched) - target: $.components.schemas.AuditDetailsEmpty update: - description: >- - Empty details. For: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, - chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, - thread_created, audit_events_accessed + description: "Empty details. For: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed." - target: $.components.schemas.AuditDetailsInitiator update: description: 'For: user_added_to_tag, user_removed_from_tag, user_chat_leave' @@ -1223,9 +1212,7 @@ actions: description: Number of returned results - target: $.components.schemas.AuditDetailsSearch.properties.filters update: - description: >- - Applied filters. Possible keys depend on the search type: order, sort, created_from, created_to, company_roles - (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages) + description: "Applied filters. Possible keys depend on the search type: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages)." - target: $.components.schemas.AuditDetailsBotScopes update: description: 'For: bot_scopes_updated' @@ -1240,9 +1227,7 @@ actions: description: 'For: bot_webhook_settings_updated' - target: $.components.schemas.AuditDetailsBotWebhookSettings.properties.changes update: - description: >- - Changed webhook settings. The key is the setting name (outgoing_url, ignore_self_messages, - events_history_enabled), the value is an object with previous and new fields + description: "Changed webhook settings. The key is the setting name (outgoing_url, ignore_self_messages, events_history_enabled), the value is an object with previous and new fields." - target: $.components.schemas.AuditDetailsVideoCall update: description: 'For: video_call_started, video_call_finished' @@ -1320,9 +1305,7 @@ actions: description: Actor type - target: $.components.schemas.AuditEvent.properties.details update: - description: >- - Additional event details. Structure depends on the event_key value — see event_key field value descriptions. For - events without details, an empty object is returned + description: "Additional event details. Structure depends on the event_key value — see event_key field value descriptions. For events without details, an empty object is returned." - target: $.components.schemas.AuditEvent.properties.ip_address update: description: IP address from which the action was performed @@ -1331,7 +1314,7 @@ actions: description: Client user agent - target: $.components.schemas.AuditEventDetailsUnion update: - description: Additional audit event details. Structure depends on the event_key value + description: "Additional audit event details. Structure depends on the event_key value." - target: $.components.schemas.AuditEventKey update: description: Audit event type @@ -1400,7 +1383,7 @@ actions: description: Outgoing webhook URL - target: $.components.schemas.BotResponse.properties.webhook.properties.scopes update: - description: Bot token scopes (permissions) + description: "Bot token scopes (permissions). The default set is broader than what can be assigned explicitly, so values that cannot be set explicitly may appear here." - target: $.components.schemas.BotResponse.properties.webhook.properties.template update: description: Template for formatting the incoming webhook. `null` if not set. @@ -1430,7 +1413,7 @@ actions: description: Who can add the bot to chats - target: $.components.schemas.BotCreateResponse.properties.webhook.properties.scopes update: - description: Bot token scopes (permissions) + description: "Bot token scopes (permissions). The default set is broader than what can be assigned explicitly, so values that cannot be set explicitly may appear here." - target: $.components.schemas.BotCreateResponse.properties.webhook.properties.template update: description: Template for formatting the incoming webhook. `null` if not set. @@ -1484,7 +1467,7 @@ actions: description: Bot commands (trigger words) it reacts to when trigger_on = commands. The combined length of the comma-joined commands must not exceed 255 characters. - target: $.components.schemas.BotUpdateRequest.properties.webhook.properties.scopes update: - description: Bot token scopes (permissions). If omitted, the bot receives the default set. + description: "Bot token scopes (permissions). If omitted, the bot receives the default set. Not every scope is available to a bot: some are allowed only for user roles, and attempting to assign such a scope returns `400`. The service values `bot` and `all` cannot be assigned." - target: $.components.schemas.BotUpdateRequest.properties.webhook.properties.template update: description: Template for formatting the incoming webhook @@ -1605,7 +1588,7 @@ actions: description: Bot commands (trigger words) it reacts to when trigger_on = commands. The combined length of the comma-joined commands must not exceed 255 characters. - target: $.components.schemas.BotCreateRequest.properties.webhook.properties.scopes update: - description: Bot token scopes (permissions). If omitted, the bot receives the default set. + description: "Bot token scopes (permissions). If omitted, the bot receives the default set. Not every scope is available to a bot: some are allowed only for user roles, and attempting to assign such a scope returns `400`. The service values `bot` and `all` cannot be assigned." - target: $.components.schemas.BotCreateRequest.properties.webhook.properties.template update: description: Template for formatting the incoming webhook @@ -1644,7 +1627,7 @@ actions: description: Bot nickname - target: $.components.schemas.BotWebhook.properties.outgoing_url update: - description: Outgoing webhook URL + description: "Outgoing webhook URL. `null` if the bot has no outgoing webhook configured." - target: $.components.schemas.BotWebhook.properties.events update: description: Events the bot is subscribed to @@ -1656,7 +1639,7 @@ actions: description: Bot commands (trigger words) - target: $.components.schemas.BotWebhook.properties.scopes update: - description: Bot token scopes (permissions) + description: "Bot token scopes (permissions). The default set is broader than what can be assigned explicitly, so values that cannot be set explicitly may appear here." - target: $.components.schemas.BotWebhook.properties.template update: description: Template for formatting the incoming webhook. `null` if not set. @@ -1862,7 +1845,7 @@ actions: description: ID of the message the button belongs to - target: $.components.schemas.ButtonWebhookPayload.properties.trigger_id update: - description: Unique event identifier. Lifetime — 3 seconds. Can be used, for example, to open a view for the user + description: "Unique event identifier. Lifetime — 3 seconds. Can be used, for example, to open a view for the user." - target: $.components.schemas.ButtonWebhookPayload.properties.data update: description: Clicked button data @@ -1978,7 +1961,7 @@ actions: description: ID of the chat where membership changed - target: $.components.schemas.ChatMemberWebhookPayload.properties.thread_id update: - description: Thread ID + description: "Thread ID. `null` if the members were added to a regular chat or channel rather than a thread." - target: $.components.schemas.ChatMemberWebhookPayload.properties.user_ids update: description: Array of user IDs affected by the event @@ -2052,7 +2035,9 @@ actions: description: Property type - target: $.components.schemas.CustomProperty.properties.value update: - description: Value + description: >- + Value. Returns `null` if the property is not filled in. A number is returned as a string, a date in ISO 8601 + format. - target: $.components.schemas.CustomPropertyDataType update: description: Custom property data type @@ -2113,10 +2098,10 @@ actions: description: Direct file download URL - target: $.components.schemas.File.properties.width update: - description: Image width in pixels + description: "Image width in pixels. `null` for files that are not images, and if the size was not supplied at upload time." - target: $.components.schemas.File.properties.height update: - description: Image height in pixels + description: "Image height in pixels. `null` for files that are not images, and if the size was not supplied at upload time." - target: $.components.schemas.FileType update: description: File type @@ -2176,10 +2161,10 @@ actions: description: ID of the thread containing the original message - target: $.components.schemas.Forwarding.properties.original_thread_message_id update: - description: ID of the message that the thread containing the original message was created for + description: "ID of the message that the thread containing the original message was created for. `null` if the original message was not in a thread, or the thread was created without being linked to a message." - target: $.components.schemas.Forwarding.properties.original_thread_parent_chat_id update: - description: ID of the chat of the message that the thread containing the original message was created for + description: "ID of the chat of the message that the thread containing the original message was created for. `null` if the original message was not in a thread, or the thread was created without being linked to a message." - target: $.components.schemas.GroupTag update: description: Group tag @@ -2235,7 +2220,7 @@ actions: description: Link unfurling request - target: $.components.schemas.LinkPreviewsRequest.properties.link_previews update: - description: '`JSON` map of link previews, where each key is a `URL` received in the outgoing webhook about a new message.' + description: "`JSON` map of link previews, where each key is a `URL` received in the outgoing webhook about a new message" - target: $.components.schemas.LinkSharedWebhookPayload update: description: Outgoing webhook payload for link unfurling @@ -2430,10 +2415,10 @@ actions: description: Attached files - target: $.components.schemas.Message.properties.buttons update: - description: Array of rows, each represented as an array of buttons + description: "Array of rows, each represented as an array of buttons. `null` if the message was sent without buttons." - target: $.components.schemas.Message.properties.thread update: - description: Message thread + description: "Thread created for this message. `null` if no thread was created, and for messages that are themselves inside a thread." - target: $.components.schemas.Message.properties.thread.properties.id update: description: Thread ID @@ -2442,22 +2427,22 @@ actions: description: Thread chat ID - target: $.components.schemas.Message.properties.forwarding update: - description: Forwarded message information + description: "Forwarded message information. `null` if the message is not a forwarded one." - target: $.components.schemas.Message.properties.parent_message_id update: - description: ID of the message being replied to + description: "ID of the message being replied to. `null` if the message is not a reply to another message." - target: $.components.schemas.Message.properties.display_avatar_url update: - description: Message sender avatar URL + description: "Message sender avatar URL. The field is present only on messages from bots; it is absent from the response for messages from employees. `null` if the bot did not override the value when sending." - target: $.components.schemas.Message.properties.display_name update: - description: Message sender full name + description: "Message sender full name. The field is present only on messages from bots; it is absent from the response for messages from employees. `null` if the bot did not override the value when sending." - target: $.components.schemas.Message.properties.changed_at update: - description: Message last edit date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: "Message last change date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. For a message that was never edited it equals the creation date. `null` for messages sent before this field was introduced." - target: $.components.schemas.Message.properties.deleted_at update: - description: Message deletion date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: "Message deletion date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` for messages that are not deleted. Deleted messages are not returned in the message list." - target: $.components.schemas.MessageCreateRequest update: description: Message creation request @@ -2603,10 +2588,10 @@ actions: description: ID of the chat containing the message - target: $.components.schemas.MessageWebhookPayload.properties.parent_message_id update: - description: ID of the message being replied to + description: "ID of the message being replied to. `null` if the message is not a reply to another message." - target: $.components.schemas.MessageWebhookPayload.properties.thread update: - description: Thread parameters object + description: "The thread the message was sent in. `null` if the message was not sent in a thread. Unlike the `thread` field on the REST API message object, this describes the thread the message is inside of." - target: $.components.schemas.MessageWebhookPayload.properties.webhook_timestamp update: description: Webhook send date and time (UTC+0) in UNIX format @@ -2876,7 +2861,7 @@ actions: description: Description - target: $.components.schemas.Task.properties.due_at update: - description: Task due date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: "Task due date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` if no due date is set." - target: $.components.schemas.Task.properties.priority update: description: Priority @@ -2885,7 +2870,7 @@ actions: description: ID of the user who created the task - target: $.components.schemas.Task.properties.chat_id update: - description: ID of the chat the task is linked to + description: "ID of the chat the task is linked to. `null` if the task is not linked to a chat." - target: $.components.schemas.Task.properties.status update: description: Task status @@ -2920,7 +2905,7 @@ actions: be created as an all-day task (without specific time). - target: $.components.schemas.TaskCreateRequest.properties.task.properties.priority update: - description: 'Priority: 1, 2 (important), or 3 (very important).' + description: 'Priority: 1, 2 (important), or 3 (very important)' - target: $.components.schemas.TaskCreateRequest.properties.task.properties.performer_ids update: description: Array of user IDs to assign as task performers (defaults to you) @@ -2977,7 +2962,7 @@ actions: be created as an all-day task (without specific time). - target: $.components.schemas.TaskUpdateRequest.properties.task.properties.priority update: - description: 'Priority: 1, 2 (important), or 3 (very important).' + description: 'Priority: 1, 2 (important), or 3 (very important)' - target: $.components.schemas.TaskUpdateRequest.properties.task.properties.performer_ids update: description: Array of user IDs to assign as task performers @@ -3063,10 +3048,11 @@ actions: description: User ID - target: $.components.schemas.User.properties.first_name update: - description: First name + description: >- + First name. Returns `null` until an invited employee completes registration (`invite_status` of `sent`). - target: $.components.schemas.User.properties.last_name update: - description: Last name + description: "Last name. If not filled in, `null` or an empty string is returned." - target: $.components.schemas.User.properties.nickname update: description: Username @@ -3078,10 +3064,10 @@ actions: description: Phone number. Returns `null` for bots without permission to view personal data, and when a bot for which personal data of employees is hidden requests another user's data. - target: $.components.schemas.User.properties.department update: - description: Department + description: "Department. If not specified, `null` or an empty string is returned." - target: $.components.schemas.User.properties.title update: - description: Job title + description: "Job title. If not specified, `null` or an empty string is returned." - target: $.components.schemas.User.properties.role update: description: Access level @@ -3102,7 +3088,7 @@ actions: description: Employee custom properties - target: $.components.schemas.User.properties.user_status update: - description: Status + description: "Status. `null` if the employee has no status set." - target: $.components.schemas.User.properties.bot update: description: Whether this is a bot @@ -3114,13 +3100,13 @@ actions: description: Creation date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format - target: $.components.schemas.User.properties.last_activity_at update: - description: User last activity date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: "User last activity date (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` if the employee has never signed in to Pachca — in that case `invite_status` returns `sent`." - target: $.components.schemas.User.properties.time_zone update: - description: User time zone + description: "User time zone. `null` if the employee has not set a personal time zone — the company time zone applies then." - target: $.components.schemas.User.properties.image_url update: - description: User avatar download URL + description: "User avatar download URL. `null` if no avatar is uploaded." - target: $.components.schemas.UserCreateRequest update: description: Employee creation request @@ -3229,15 +3215,13 @@ actions: description: Status text - target: $.components.schemas.UserStatus.properties.expires_at update: - description: Status expiration date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format + description: "Status expiration date and time (ISO-8601, UTC+0) in YYYY-MM-DDThh:mm:ss.sssZ format. `null` if no expiration is set — such a status is not cleared automatically." - target: $.components.schemas.UserStatus.properties.is_away update: description: Whether to enable "Away" mode - target: $.components.schemas.UserStatus.properties.away_message update: - description: >- - "Away" mode message. Displayed in the user profile, as well as when sending a direct message or mentioning them - in a chat. + description: "\"Away\" mode message. Displayed in the user profile, as well as when sending a direct message or mentioning them in a chat. `null` if the auto-reply text is not set." - target: $.components.schemas.UserStatus.properties.away_message.properties.text update: description: Message text @@ -3446,7 +3430,7 @@ actions: file extensions will be accepted. - target: $.components.schemas.ViewBlockFileInput.properties.max_files update: - description: Maximum number of files the user can upload to this field. + description: "Maximum number of files the user can upload to this field" - target: $.components.schemas.ViewBlockFileInput.properties.required update: description: Required @@ -3641,10 +3625,10 @@ actions: submit: Form submission - target: $.components.schemas.ViewSubmitWebhookPayload.properties.callback_id update: - description: Callback ID specified when opening the view + description: "Callback ID specified when opening the view. `null` if it was not specified when the form was opened." - target: $.components.schemas.ViewSubmitWebhookPayload.properties.private_metadata update: - description: Private metadata specified when opening the view + description: "Private metadata specified when opening the view. `null` if it was not specified when the form was opened." - target: $.components.schemas.ViewSubmitWebhookPayload.properties.chat_id update: description: ID of the chat in which the button that opened the form was clicked. The value is captured at the moment the form was **opened**, not submitted — if the form stayed open for a long time, `chat_id` still points to the chat where the button was clicked. The field is always present in the payload; for forms opened before this change was rolled out, `chat_id` will be `null` — such forms will gradually phase out by the saved view TTL (30 days). @@ -3653,7 +3637,7 @@ actions: description: ID of the user who submitted the form - target: $.components.schemas.ViewSubmitWebhookPayload.properties.data update: - description: Submitted view field data. Key — field `action_id`, value — entered data + description: "Submitted view field data. Key — field `action_id`, value — entered data." - target: $.components.schemas.ViewSubmitWebhookPayload.properties.webhook_timestamp update: description: Webhook send date and time (UTC+0) in UNIX format @@ -3692,7 +3676,7 @@ actions: description: Link domain - target: $.components.schemas.WebhookLink.properties.skip update: - description: Whether the message author hid the preview for this link. If `true`, the bot must not create a preview + description: "Whether the message author hid the preview for this link. If `true`, the bot must not create a preview." - target: $.components.schemas.LinkSharedWebhookPayload.properties.links.items.properties.skip update: description: Whether the message author hid the preview for this link. If `true`, the bot must not create a preview @@ -3714,7 +3698,7 @@ actions: description: Field key that caused the error - target: $.components.schemas.ApiError.properties.errors.items.properties.value update: - description: Field value that caused the error + description: "Field value that caused the error. `null` if the error does not relate to a specific value." - target: $.components.schemas.ApiError.properties.errors.items.properties.message update: description: Error message @@ -3723,9 +3707,7 @@ actions: description: Error code - target: $.components.schemas.ApiError.properties.errors.items.properties.payload update: - description: >- - Additional error data. Content depends on the error code: - `{id: number}` for custom property errors, `{type: string}` for type mismatch errors + description: "Additional error data. Content depends on the error code: `{id: number}` — for custom property errors (property ID), `{record: {type: string, id: number}, query: string}` — for authorization errors. In most cases `null`." # LinkSharedWebhookPayload nested items - target: $.components.schemas.LinkSharedWebhookPayload.properties.links.items.properties.url @@ -3753,10 +3735,10 @@ actions: description: Direct file download URL - target: $.components.schemas.Message.properties.files.items.properties.width update: - description: Image width in pixels + description: "Image width in pixels. `null` for files that are not images, and if the size was not supplied at upload time." - target: $.components.schemas.Message.properties.files.items.properties.height update: - description: Image height in pixels + description: "Image height in pixels. `null` for files that are not images, and if the size was not supplied at upload time." # Message.forwarding nested properties - target: $.components.schemas.Message.properties.forwarding.properties.original_message_id diff --git a/packages/spec/typespec.tsp b/packages/spec/typespec.tsp index b3d0e7b3f..8853dbf73 100644 --- a/packages/spec/typespec.tsp +++ b/packages/spec/typespec.tsp @@ -774,10 +774,10 @@ model CustomProperty { @example(CustomPropertyDataType.string) data_type: CustomPropertyDataType; - @doc("Значение") + @doc("Значение. Возвращается `null`, если поле не заполнено. Число передаётся строкой, дата — в формате ISO 8601.") @maxLength(768) @example("Санкт-Петербург") - value: string; + value: string | null; } @doc("Дополнительное поле") @@ -807,7 +807,7 @@ model UserStatus { @example("Очень занят") title: string; - @doc("Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ") + @doc("Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан — такой статус не сбрасывается автоматически.") @example(utcDateTime.fromISO("2024-04-08T10:00:00.000Z")) expires_at: utcDateTime | null; @@ -815,7 +815,7 @@ model UserStatus { @example(false) is_away: boolean; - @doc("Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате.") + @doc("Сообщение при режиме «Нет на месте». Отображается в профиле пользователя, а также при отправке ему личного сообщения или упоминании в чате. `null`, если текст автоответа не задан.") away_message: { @doc("Текст сообщения") @maxLength(1024) @@ -846,11 +846,11 @@ model File { @example("https://pachca-prod-uploads.s3.storage.selcloud.ru/attaches/files/12/21zu7934-02e1-44d9-8df2-0f970c259796/congrat.png?response-cache-control=max-age%3D3600%3B&response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=142155_staply%2F20231107%2Fru-1a%2Fs3%2Faws4_request&X-Amz-Date=20231107T160412&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=98765asgfadsfdSaDSd4sdfg35asdf67sadf8") url: string; - @doc("Ширина изображения в пикселях") + @doc("Ширина изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.") @example(1920) width?: int32 | null; - @doc("Высота изображения в пикселях") + @doc("Высота изображения в пикселях. `null` для файлов, не являющихся изображением, а также если размер не был передан при загрузке.") @example(1080) height?: int32 | null; } @@ -917,11 +917,11 @@ model Forwarding { @example(null) original_thread_id: int32 | null; - @doc("Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение") + @doc("Идентификатор сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.") @example(null) original_thread_message_id: int32 | null; - @doc("Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение") + @doc("Идентификатор чата сообщения, к которому был создан тред, в котором находится оригинальное сообщение. `null`, если оригинальное сообщение было не в треде или тред создан без привязки к сообщению.") @example(null) original_thread_parent_chat_id: int32 | null; } @@ -936,12 +936,12 @@ model User { @example(12) id: int32; - @doc("Имя") + @doc("Имя. Возвращается `null`, пока приглашённый сотрудник не завершил регистрацию (`invite_status` со значением `sent`).") @maxLength(255) @example("Олег") - first_name: string; + first_name: string | null; - @doc("Фамилия") + @doc("Фамилия. Если не заполнена, возвращается `null` или пустая строка.") @maxLength(255) @example("Петров") last_name: string | null; @@ -961,12 +961,12 @@ model User { @example("+79001234567") phone_number: string | null; - @doc("Департамент") + @doc("Департамент. Если не указан, возвращается `null` или пустая строка.") @maxLength(255) @example("Продукт") department: string | null; - @doc("Должность") + @doc("Должность. Если не указана, возвращается `null` или пустая строка.") @example("CIO") title: string | null; @@ -993,7 +993,7 @@ model User { @doc("Дополнительные поля сотрудника") custom_properties: CustomProperty[]; - @doc("Статус") + @doc("Статус. `null`, если у сотрудника не установлен статус.") user_status: UserStatus | null; @doc("Является ботом") @@ -1008,16 +1008,16 @@ model User { @example(utcDateTime.fromISO("2020-06-08T09:32:57.000Z")) created_at: utcDateTime; - @doc("Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ") + @doc("Дата последней активности пользователя (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если сотрудник ещё ни разу не заходил в Пачку — в этом случае `invite_status` возвращает `sent`.") @example(utcDateTime.fromISO("2025-01-20T13:40:07.000Z")) last_activity_at: utcDateTime | null; - @doc("Часовой пояс пользователя") + @doc("Часовой пояс пользователя. `null`, если сотрудник не задал личный часовой пояс — тогда применяется часовой пояс компании.") @maxLength(32) @example("Europe/Moscow") time_zone: string | null; - @doc("Ссылка на скачивание аватарки пользователя") + @doc("Ссылка на скачивание аватарки пользователя. `null`, если аватарка не загружена.") @example("https://app.pachca.com/users/12/photo.jpg") image_url: string | null; } @@ -1129,10 +1129,10 @@ model Message { @doc("Данные голосового сообщения. Заполняется только для голосовых сообщений (`file_type` файла — `voice`), иначе `null`.") voice_content: VoiceContent | null; - @doc("Массив строк, каждая из которых представлена массивом кнопок") + @doc("Массив строк, каждая из которых представлена массивом кнопок. `null`, если сообщение отправлено без кнопок.") buttons: Button[][] | null; - @doc("Тред сообщения") + @doc("Тред, созданный к этому сообщению. `null`, если тред не создан, а также у сообщений, которые сами находятся внутри треда.") thread: { @doc("Идентификатор треда") @example(265142) @@ -1143,26 +1143,26 @@ model Message { chat_id: int64; } | null; - @doc("Информация о пересланном сообщении") + @doc("Информация о пересланном сообщении. `null`, если сообщение не является пересланным.") forwarding: Forwarding | null; - @doc("Идентификатор сообщения, к которому написан ответ") + @doc("Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.") @example(null) parent_message_id: int32 | null; - @doc("Ссылка на аватарку отправителя сообщения") + @doc("Ссылка на аватарку отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.") @example(null) - display_avatar_url: string | null; + display_avatar_url?: string | null; - @doc("Полное имя отправителя сообщения") + @doc("Полное имя отправителя сообщения. Поле присутствует только у сообщений от ботов; у сообщений от сотрудников его в ответе нет. `null`, если бот не переопределял значение при отправке.") @example(null) - display_name: string | null; + display_name?: string | null; - @doc("Дата и время последнего редактирования сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ") + @doc("Дата и время последнего изменения сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. У неотредактированного сообщения совпадает с датой создания. `null` у сообщений, отправленных до появления этого поля.") @example(utcDateTime.fromISO("2021-08-28T16:10:00.000Z")) changed_at: utcDateTime | null; - @doc("Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ") + @doc("Дата и время удаления сообщения (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null` у неудалённых сообщений. В списке сообщений удалённые не возвращаются.") @example(null) deleted_at: utcDateTime | null; } @@ -1199,7 +1199,7 @@ model Reaction { @doc("Название emoji реакции") @example(":+1::skin-tone-1:") - name: string | null; + name: string; } @doc("Напоминание") @@ -1216,7 +1216,7 @@ model Task { @example("Забрать со склада 21 заказ") content: string; - @doc("Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ") + @doc("Срок выполнения напоминания (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ. `null`, если срок не задан.") @example(utcDateTime.fromISO("2020-06-05T09:00:00.000Z")) due_at: utcDateTime | null; @@ -1228,7 +1228,7 @@ model Task { @example(12) user_id: int32; - @doc("Идентификатор чата, к которому привязано напоминание") + @doc("Идентификатор чата, к которому привязано напоминание. `null`, если напоминание не привязано к чату.") @example(334) chat_id: int32 | null; @@ -1603,7 +1603,7 @@ model AccessTokenInfo { @example("cH5kR9mN...x7Qp") token: string; - @doc("Пользовательское имя токена") + @doc("Пользовательское имя токена. `null` у токена бота — имя задаётся только при создании токена вручную.") @example("Мой API токен") name: string | null; @@ -1619,15 +1619,15 @@ model AccessTokenInfo { @example(utcDateTime.fromISO("2025-01-15T10:30:00.000Z")) created_at: utcDateTime; - @doc("Дата отзыва токена") + @doc("Дата отзыва токена. Всегда `null`: по отозванному токену метод возвращает 401.") @example(null) revoked_at: utcDateTime | null; - @doc("Время жизни токена в секундах") + @doc("Время жизни токена в секундах. Всегда `null` — токены выдаются бессрочно.") @example(null) expires_in: int32 | null; - @doc("Дата последнего использования токена") + @doc("Дата последнего использования токена. `null`, пока по токену не было ни одного запроса. Обновляется не чаще раза в час, поэтому может отставать.") @example(utcDateTime.fromISO("2025-02-24T14:20:00.000Z")) last_used_at: utcDateTime | null; } @@ -1649,7 +1649,7 @@ model ApiErrorItem { @example("field.name") key: string; - @doc("Значение поля, которое вызвало ошибку") + @doc("Значение поля, которое вызвало ошибку. `null`, если ошибка не относится к конкретному значению.") @example("invalid_value") value: string | null; @@ -1661,7 +1661,7 @@ model ApiErrorItem { @example(ValidationErrorCode.blank) code: ValidationErrorCode; - @doc("Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`") + @doc("Дополнительные данные об ошибке. Содержимое зависит от кода ошибки: `{id: number}` — при ошибке кастомного свойства (идентификатор свойства), `{record: {type: string, id: number}, query: string}` — при ошибке авторизации. В большинстве случаев `null`.") @example(null) payload: Record | null; } @@ -2145,7 +2145,7 @@ model LinkPreview { @doc("Запрос на разворачивание ссылок") model LinkPreviewsRequest { - @doc("`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении.") + @doc("`JSON` карта предпросмотров ссылок, где каждый ключ — `URL`, который был получен в исходящем вебхуке о новом сообщении") @extension("x-record-key-example", "https://website.com/articles/123") link_previews: Record; } @@ -2166,7 +2166,7 @@ model TaskCreateRequest { @example(utcDateTime.fromISO("2020-06-05T12:00:00.000+03:00")) due_at?: utcDateTime; - @doc("Приоритет: 1, 2 (важно) или 3 (очень важно).") + @doc("Приоритет: 1, 2 (важно) или 3 (очень важно)") @example(2) priority?: int32 = 1; @@ -2211,7 +2211,7 @@ model TaskUpdateRequest { @example(utcDateTime.fromISO("2020-06-05T12:00:00.000+03:00")) due_at?: utcDateTime; - @doc("Приоритет: 1, 2 (важно) или 3 (очень важно).") + @doc("Приоритет: 1, 2 (важно) или 3 (очень важно)") @example(2) priority?: int32; @@ -2602,7 +2602,7 @@ model ViewBlockFileInput { @example(#["pdf","jpg","png"]) filetypes?: string[]; - @doc("Максимальное количество файлов, которое может загрузить пользователь в это поле.") + @doc("Максимальное количество файлов, которое может загрузить пользователь в это поле") @example(1) @minValue(1) @maxValue(10) @@ -2671,7 +2671,7 @@ model OpenViewRequest { @doc("Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.") @maxLength(255) - @example("timeoff_reguest_form") + @example("timeoff_request_form") callback_id?: string; @doc("Собранный объект представления") @@ -2815,7 +2815,7 @@ model BotCreateRequest { @example(#["/task", "/help"]) commands?: string[]; - @doc("Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.") + @doc("Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.") @example(#["messages:create"]) scopes?: string[]; @@ -2887,7 +2887,7 @@ model BotUpdateRequest { @example(#["/task", "/help"]) commands?: string[]; - @doc("Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию.") + @doc("Скоупы (права доступа) токена бота. Если не указано, бот получает набор по умолчанию. Боту доступны не все скоупы: часть из них разрешена только пользовательским ролям, и попытка назначить такой скоуп возвращает `400`. Служебные значения `bot` и `all` назначать нельзя.") @example(#["messages:create"]) scopes?: string[]; @@ -2937,7 +2937,7 @@ model BotWebhook { @example("tasks_bot") nickname: string; - @doc("URL исходящего вебхука") + @doc("URL исходящего вебхука. `null`, если исходящий вебхук у бота не настроен.") @example("https://www.website.com/tasks/new") outgoing_url: string | null; @@ -2953,7 +2953,7 @@ model BotWebhook { @example(#["/task"]) commands: string[]; - @doc("Скоупы (права доступа) токена бота") + @doc("Скоупы (права доступа) токена бота. Набор по умолчанию шире того, что можно назначить явно, поэтому здесь могут встречаться значения, недоступные для явной установки.") @example(#["messages:create"]) scopes: string[]; @@ -3023,7 +3023,7 @@ model BotCreateResponse { access_token: string; } -@doc("Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted") +@doc("Пустые детали. При: user_login, user_logout, user_2fa_fail, user_2fa_success, user_created, user_deleted, chat_created, message_created, message_updated, message_deleted, reaction_created, reaction_deleted, thread_created, audit_events_accessed, bot_token_recreated, bot_deleted.") model AuditDetailsEmpty {} @doc("При: user_updated") @@ -3132,7 +3132,7 @@ model AuditDetailsSearch { cursor_present: boolean; @doc("Количество возвращённых результатов") limit: int32; - @doc("Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages)") + @doc("Применённые фильтры. Возможные ключи зависят от типа поиска: order, sort, created_from, created_to, company_roles (users), active, chat_subtype, personal (chats), chat_ids, user_ids (messages).") filters: Record; } @@ -3146,7 +3146,7 @@ model AuditDetailsBotScopes { @doc("При: bot_webhook_settings_updated") model AuditDetailsBotWebhookSettings { - @doc("Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение)") + @doc("Изменённые настройки вебхука. Ключ — имя настройки (outgoing_url, ignore_self_messages, events_history_enabled), значение — объект с полями previous (прежнее значение) и new (новое значение).") changes: Record; } @@ -3170,7 +3170,7 @@ model AuditDetailsVideoCallRecording { size: int64; } -@doc("Дополнительные детали события аудита. Структура зависит от значения event_key") +@doc("Дополнительные детали события аудита. Структура зависит от значения event_key.") union AuditEventDetailsUnion { AuditDetailsEmpty, AuditDetailsUserUpdated, @@ -3222,7 +3222,7 @@ model AuditEvent { @example("User") actor_type: string; - @doc("Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект") + @doc("Дополнительные детали события. Структура зависит от значения event_key — см. описания значений поля event_key. Для событий без деталей возвращается пустой объект.") details: AuditEventDetailsUnion; @doc("IP-адрес, с которого было выполнено действие") @@ -3294,11 +3294,11 @@ model MessageWebhookPayload { @example(9012) chat_id: int32; - @doc("Идентификатор сообщения, к которому написан ответ") + @doc("Идентификатор сообщения, к которому написан ответ. `null`, если сообщение не является ответом на другое сообщение.") @example(3456) parent_message_id?: int32 | null; - @doc("Объект с параметрами треда") + @doc("Тред, в котором отправлено сообщение. `null`, если сообщение отправлено не в треде. В отличие от поля `thread` в объекте сообщения REST API, здесь описывается тред, внутри которого находится сообщение.") thread?: WebhookMessageThread | null; @doc("Дата и время отправки вебхука (UTC+0) в формате UNIX") @@ -3368,7 +3368,7 @@ model ButtonWebhookPayload { @example(1245817) message_id: int32; - @doc("Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю") + @doc("Уникальный идентификатор события. Время жизни — 3 секунды. Может быть использован, например, для открытия представления пользователю.") @example("a1b2c3d4-5e6f-7g8h-9i10-j11k12l13m14") trigger_id: string; @@ -3405,12 +3405,12 @@ model ViewSubmitWebhookPayload { }) event: "submit"; - @doc("Идентификатор обратного вызова, указанный при открытии представления") + @doc("Идентификатор обратного вызова, указанный при открытии представления. `null`, если при открытии формы он не был указан.") @example("timeoff_request_form") callback_id: string | null; - @doc("Приватные метаданные, указанные при открытии представления") - @example("{'timeoff_id':4378}") + @doc("Приватные метаданные, указанные при открытии представления. `null`, если при открытии формы они не были указаны.") + @example("{\"timeoff_id\":4378}") private_metadata: string | null; @doc("Идентификатор чата, в котором была нажата кнопка, открывшая форму. Поле может быть `null` для форм, открытых до выкатки этого поля.") @@ -3421,7 +3421,7 @@ model ViewSubmitWebhookPayload { @example(1235523) user_id: int32; - @doc("Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные") + @doc("Данные заполненных полей представления. Ключ — `name` блока, значение — введённые данные.") data: Record; @doc("Дата и время отправки вебхука (UTC+0) в формате UNIX") @@ -3446,7 +3446,7 @@ model ChatMemberWebhookPayload { @example(9012) chat_id: int32; - @doc("Идентификатор треда") + @doc("Идентификатор треда. `null`, если участники добавлены в обычный чат или канал, а не в тред.") @example(5678) thread_id?: int32 | null; @@ -3499,7 +3499,7 @@ model WebhookLink { @example("example.com") domain: string; - @doc("Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью") + @doc("Признак того, что автор сообщения скрыл превью для этой ссылки. Если `true` — бот не должен создавать превью.") @example(false) skip: boolean; } @@ -3834,12 +3834,14 @@ interface ProfileOperations { Свой статус Метод для получения информации о своем статусе. + +Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. """) @route("/status") @get getStatus(): { @statusCode _: 200; - @body body: DataResponse; + @body body: DataResponse | null; } | { @statusCode _: 401; @body body: OAuthError; @@ -4164,6 +4166,8 @@ interface UserStatusOperations { Статус сотрудника Метод для получения информации о статусе сотрудника. + +Если статус не установлен, метод возвращает `200` и `null` в теле ответа — без объекта-обёртки. Статус с истёкшим `expires_at` какое-то время ещё возвращается, пока не будет очищен, поэтому проверяйте `expires_at` на стороне клиента. """) @route("/{user_id}/status") @get @@ -4173,7 +4177,7 @@ interface UserStatusOperations { @path user_id: int32 ): { @statusCode _: 200; - @body body: DataResponse; + @body body: DataResponse | null; } | { @statusCode _: 401; @body body: OAuthError; @@ -6725,11 +6729,11 @@ interface SecurityOperations { @get getAuditEvents( @doc("Начальная метка времени (включительно)") - @extension("example", "2025-05-01T09:11:00Z") + @extension("example", "2025-05-01T09:11:00.000Z") @query start_time?: utcDateTime, - @doc("Конечная метка времени (исключительно)") - @extension("example", "2025-05-02T09:11:00Z") + @doc("Конечная метка времени (включительно)") + @extension("example", "2025-05-02T09:11:00.000Z") @query end_time?: utcDateTime, @doc("Фильтр по конкретному типу события") diff --git a/packages/spec/workflows.ts b/packages/spec/workflows.ts index b87a6f2fb..98f937730 100644 --- a/packages/spec/workflows.ts +++ b/packages/spec/workflows.ts @@ -110,7 +110,7 @@ export const WORKFLOWS: Record = { { description: 'Получи или создай тред, возьми `thread.id` из ответа', descriptionEn: 'Get or create thread, take `thread.id` from response', - command: 'pachca thread add ', + command: 'pachca threads add ', apiMethod: 'POST', apiPath: '/messages/{id}/thread', notes: 'Если тред уже существует, вернётся существующий', @@ -315,7 +315,7 @@ export const WORKFLOWS: Record = { { description: 'Получи или создай тред, возьми `chat_id` из ответа', descriptionEn: 'Get or create thread, take `chat_id` from response', - command: 'pachca thread add ', + command: 'pachca threads add ', apiMethod: 'POST', apiPath: '/messages/{id}/thread', }, diff --git a/scripts/build-sdks.sh b/scripts/build-sdks.sh index 0d3494eab..5154ded99 100755 --- a/scripts/build-sdks.sh +++ b/scripts/build-sdks.sh @@ -17,6 +17,10 @@ fail=0 have() { command -v "$1" >/dev/null 2>&1; } step() { printf '\n=== %s ===\n' "$1"; } run() { if "$@"; then echo " OK"; else echo " FAIL"; fail=1; fi; } +# `run` inside a subshell — ( cd dir && run cmd ) — sets fail=1 in the SUBSHELL, +# so the parent never sees it and the script exits 0 after printing FAIL. Use +# run_in: the cd stays isolated, the exit status is evaluated in the parent. +run_in() { local dir="$1"; shift; if ( cd "$dir" && "$@" ); then echo " OK"; else echo " FAIL"; fail=1; fi; } step "Generate SDKs from openapi.yaml" run bunx turbo run generate @@ -26,23 +30,74 @@ step "TypeScript: build + smoke + attw verify" && echo " OK" || { echo " FAIL"; fail=1; } step "Go: go build ./..." -if have go; then ( cd sdk/go/generated && run go build ./... ); else echo " SKIP (go not installed)"; fi +if have go; then run_in sdk/go/generated go build ./...; else echo " SKIP (go not installed)"; fi -step "Python: py_compile" +step "Python: py_compile + import" if have python3; then - ( cd sdk/python/generated && run sh -c 'python3 -m py_compile $(find pachca -name "*.py")' ) + run_in sdk/python/generated sh -c 'python3 -m py_compile $(find pachca -name "*.py")' + # py_compile only parses: a module-level NameError (e.g. a registry naming a + # type that was never imported) compiles fine and blows up on import. Import + # the package for real, with httpx stubbed so the check needs no dependencies. + run_in sdk/python/generated python3 -c ' +import sys, types +stub = types.ModuleType("httpx") +stub.__getattr__ = lambda name: type(name, (), {}) +sys.modules["httpx"] = stub +import pachca.models, pachca.utils +' else echo " SKIP (python3 not installed)"; fi step "Kotlin: gradlew compileKotlin" if [ -x sdk/kotlin/generated/gradlew ]; then - ( cd sdk/kotlin/generated && run ./gradlew -q compileKotlin -Pversion=0.0.0 ) + run_in sdk/kotlin/generated ./gradlew -q compileKotlin -Pversion=0.0.0 else echo " SKIP (kotlin gradlew not available)"; fi step "C#: dotnet build" -if have dotnet; then ( cd sdk/csharp/generated && run dotnet build -v q ); else echo " SKIP (dotnet not installed)"; fi +if have dotnet; then run_in sdk/csharp/generated dotnet build -v q; else echo " SKIP (dotnet not installed)"; fi step "Swift: swift build" -if have swift; then ( cd sdk/swift/generated && run swift build ); else echo " SKIP (swift not installed)"; fi +if have swift; then run_in sdk/swift/generated swift build; else echo " SKIP (swift not installed)"; fi + +# The steps above build each SDK's own source root only. Every language keeps its +# examples in a sibling directory (sdk//examples) that no SDK build touches, +# so a spec change that renames a type or adds a union member breaks the shipped +# examples silently — they are linked from the READMEs, so users hit it first. +step "Examples: TypeScript tsc --noEmit" +run_in sdk/typescript bun run typecheck:examples + +step "Examples: Go go build (per file)" +# Every Go example is its own `package main` in one directory, so `go build ./...` +# only reports "main redeclared". Build them one at a time, the way a reader runs +# them (`go run .go`). +if have go; then + run_in sdk/go/examples sh -c 'for f in *.go; do go build -o /dev/null "$f" || exit 1; done' +else echo " SKIP (go not installed)"; fi + +step "Examples: Python import" +if have python3; then + # Import each example for real: py_compile would not catch a name the module + # imports from pachca.models but the spec no longer generates. + run_in sdk/python/examples python3 -c ' +import sys, types, pathlib, importlib +stub = types.ModuleType("httpx") +stub.__getattr__ = lambda name: type(name, (), {}) +sys.modules["httpx"] = stub +sys.path.insert(0, ".") +for path in sorted(pathlib.Path(".").glob("*.py")): + importlib.import_module(path.stem) +' +else echo " SKIP (python3 not installed)"; fi + +step "Examples: Kotlin gradlew compileExamplesKotlin" +if [ -x sdk/kotlin/generated/gradlew ]; then + run_in sdk/kotlin/generated ./gradlew -q compileExamplesKotlin -Pversion=0.0.0 +else echo " SKIP (kotlin gradlew not available)"; fi + +step "Examples: C# dotnet build" +if have dotnet; then run_in sdk/csharp/examples dotnet build -v q; else echo " SKIP (dotnet not installed)"; fi + +step "Examples: Swift swift build" +if have swift; then run_in sdk/swift/examples swift build; else echo " SKIP (swift not installed)"; fi echo if [ "$fail" -ne 0 ]; then echo "SDK build: FAILED (see above)"; exit 1; fi diff --git a/scripts/check-changelog-sync.mjs b/scripts/check-changelog-sync.mjs index bc57d9ea4..042594e55 100644 --- a/scripts/check-changelog-sync.mjs +++ b/scripts/check-changelog-sync.mjs @@ -18,8 +18,9 @@ * changelog the users will see. * * Override the baseline with CHANGELOG_SYNC_BASE (default: origin/main). - * Skips silently when the baseline ref is unavailable (e.g. shallow clone - * with no origin/main) — CI must fetch origin/main for the check to run. + * Fails when the baseline ref is unavailable (e.g. shallow clone with no + * origin/main) — CI must fetch origin/main for the check to run. Set + * CHANGELOG_SYNC_SKIP=1 to bypass deliberately. */ import { execSync } from 'node:child_process'; @@ -131,10 +132,18 @@ function releasesForProduct(ref, product) { const base = resolveBase(); if (!base) { + // Fail closed. Skipping here turned the whole gate into a no-op whenever the + // baseline could not be resolved, which is precisely when it is unverifiable. + if (process.env.CHANGELOG_SYNC_SKIP === '1') { + console.error(`[changelog-sync] baseline ${BASE_REF} unavailable — skipped (opt-in)`); + process.exit(0); + } console.error( - `[changelog-sync] baseline ${BASE_REF} unavailable — skipping (fetch origin/main in CI to enable)` + `[changelog-sync] baseline ${BASE_REF} unavailable — cannot verify.\n` + + ` Run \`git fetch --no-tags origin main\`, point CHANGELOG_SYNC_BASE at a\n` + + ` reachable ref, or set CHANGELOG_SYNC_SKIP=1 to bypass deliberately.` ); - process.exit(0); + process.exit(1); } const errors = []; diff --git a/scripts/check-generated-sync.mjs b/scripts/check-generated-sync.mjs index 515b3432a..ac6585318 100644 --- a/scripts/check-generated-sync.mjs +++ b/scripts/check-generated-sync.mjs @@ -46,6 +46,10 @@ const GENERATED_PATHS = [ 'packages/cli/oclif.manifest.json', // Docs — root + agent indices 'AGENTS.md', + 'SKILL.md', + 'skill.json', + 'skills/**', + 'apps/docs/public/.well-known/agent-card.json', 'apps/docs/public/index.md', 'apps/docs/public/llms.txt', 'apps/docs/public/llms-full.txt', @@ -74,7 +78,12 @@ const BUILD_FILTERS = ['@pachca/spec', '@pachca/cli', '@pachca/docs']; console.error('[check-generated-sync] regenerating artefacts via `bun turbo build`…'); try { - execSync(`bun turbo build ${BUILD_FILTERS.map((f) => `--filter=${f}`).join(' ')}`, { + // --force: several outputs (root AGENTS.md / SKILL.md / skill.json / skills/, + // packages/cli/CHANGELOG.md) live outside any task's declared `outputs`, so a + // warm turbo cache would skip regenerating them and this gate would compare a + // file nothing had rebuilt. This is the one caller that needs a guaranteed + // fresh build, so pay for it here rather than restructuring the task graph. + execSync(`bun turbo build --force ${BUILD_FILTERS.map((f) => `--filter=${f}`).join(' ')}`, { stdio: ['ignore', 'inherit', 'inherit'], }); } catch { diff --git a/scripts/check-release.mjs b/scripts/check-release.mjs index 88e726fa5..57224c68f 100644 --- a/scripts/check-release.mjs +++ b/scripts/check-release.mjs @@ -41,7 +41,9 @@ const versionRule = arg('version-rule') || 'semver'; /** Validate version string against the library's format rule. */ function validFormat(v) { - if (versionRule === 'calver') return /^\d{4}\.\d{1,2}\.\d+$/.test(v); + // CalVer month must be a real month — `\d{1,2}` accepted 2026.13.0, which is + // exactly what the (previously broken) new-month hint used to suggest. + if (versionRule === 'calver') return /^\d{4}\.(1[0-2]|[1-9])\.\d+$/.test(v); return /^\d+\.\d+\.\d+$/.test(v); } @@ -64,7 +66,9 @@ function allowedNext(max) { if (!max) return null; if (versionRule === 'calver') { const [my, mm, mp] = max.split('.').map(Number); - return { 'patch (this month)': `${my}.${mm}.${mp + 1}`, 'new month': `${my}.${mm + 1}.0` }; + // December rolls over to January of the next year, not to month 13. + const [ny, nm] = mm >= 12 ? [my + 1, 1] : [my, mm + 1]; + return { 'patch (this month)': `${my}.${mm}.${mp + 1}`, 'new month': `${ny}.${nm}.0` }; } const [M, m, p] = max.split('.').map(Number); return { patch: `${M}.${m}.${p + 1}`, minor: `${M}.${m + 1}.0`, major: `${M + 1}.0.0` }; @@ -89,6 +93,21 @@ function validIncrement(version, max) { * are not `latest` (e.g. @pachca/sdk has abandoned 2.0.0/3.0.0 while latest is * 1.0.19). Stepping from semver-max would force a jump onto the stray line. */ +/** + * "Package is genuinely unpublished" vs "npm did not answer". + * + * Both used to be swallowed into `null`, and `null` means "first release — + * any version allowed". So during an npm outage a version that skips a step + * sailed through the gate. Fail closed instead: only a real E404 counts as + * unpublished. + */ +function npmUnreachable(error) { + const stderr = String(error?.stderr ?? error?.message ?? error); + if (/E404|code E404|404 Not Found/.test(stderr)) return false; + console.error(`[check-release] npm unreachable for ${npmPkg}: ${stderr.slice(0, 300)}`); + return true; +} + function latestPublished() { try { const v = execSync(`npm view ${npmPkg} version`, { @@ -97,7 +116,8 @@ function latestPublished() { .toString() .trim(); return v || null; - } catch { + } catch (error) { + if (npmUnreachable(error)) process.exit(1); return null; } } @@ -110,7 +130,8 @@ function allPublishedVersions() { }).toString(); const parsed = JSON.parse(raw); return (Array.isArray(parsed) ? parsed : [parsed]).map(String); - } catch { + } catch (error) { + if (npmUnreachable(error)) process.exit(1); return []; } } diff --git a/sdk/csharp/examples/Examples.csproj b/sdk/csharp/examples/Examples.csproj new file mode 100644 index 000000000..aed2439ed --- /dev/null +++ b/sdk/csharp/examples/Examples.csproj @@ -0,0 +1,16 @@ + + + + Exe + net8.0 + 12 + enable + enable + Pachca.Sdk.Examples + + + + + + + diff --git a/sdk/csharp/examples/WebhookHistoryExample.cs b/sdk/csharp/examples/WebhookHistoryExample.cs index 9c686ddfa..ce35ca524 100644 --- a/sdk/csharp/examples/WebhookHistoryExample.cs +++ b/sdk/csharp/examples/WebhookHistoryExample.cs @@ -38,6 +38,7 @@ public static async Task RunAsync() ViewSubmitWebhookPayload view => $"view user_id={view.UserId} fields={view.Data.Count}", ChatMemberWebhookPayload member => $"chat_member event={member.Event} chat_id={member.ChatId} users={member.UserIds.Count}", CompanyMemberWebhookPayload member => $"company_member event={member.Event} users={member.UserIds.Count}", + VideoCallWebhookPayload call => $"video_call event={call.Event} chat_id={call.ChatId} room_id={call.VideoRoomId}", _ => $"unknown type={payload.GetType().Name}", }; } diff --git a/sdk/csharp/generated/Client.cs b/sdk/csharp/generated/Client.cs index 7a2560673..5da082dc1 100644 --- a/sdk/csharp/generated/Client.cs +++ b/sdk/csharp/generated/Client.cs @@ -2053,7 +2053,7 @@ public virtual async System.Threading.Tasks.Task GetProfileAsync(Cancellat throw new NotImplementedException("Profile.getProfile is not implemented"); } - public virtual async System.Threading.Tasks.Task GetStatusAsync(CancellationToken cancellationToken = default) + public virtual async System.Threading.Tasks.Task GetStatusAsync(CancellationToken cancellationToken = default) { throw new NotImplementedException("Profile.getStatus is not implemented"); } @@ -2112,7 +2112,7 @@ public override async System.Threading.Tasks.Task GetProfileAsync(Cancella } } - public override async System.Threading.Tasks.Task GetStatusAsync(CancellationToken cancellationToken = default) + public override async System.Threading.Tasks.Task GetStatusAsync(CancellationToken cancellationToken = default) { var url = $"{_baseUrl}/profile/status"; using var request = new HttpRequestMessage(HttpMethod.Get, url); @@ -2121,7 +2121,7 @@ public override async System.Threading.Tasks.Task GetStatusAsync(Cancell switch ((int)response.StatusCode) { case 200: - return PachcaUtils.Deserialize(json); + return PachcaUtils.Deserialize(json).Data; case 401: throw PachcaUtils.Deserialize(json); default: @@ -2727,7 +2727,7 @@ public virtual async System.Threading.Tasks.Task GetUserAsync(int id, Canc throw new NotImplementedException("Users.getUser is not implemented"); } - public virtual async System.Threading.Tasks.Task GetUserStatusAsync(int userId, CancellationToken cancellationToken = default) + public virtual async System.Threading.Tasks.Task GetUserStatusAsync(int userId, CancellationToken cancellationToken = default) { throw new NotImplementedException("Users.getUserStatus is not implemented"); } @@ -2852,7 +2852,7 @@ public override async System.Threading.Tasks.Task GetUserAsync(int id, Can } } - public override async System.Threading.Tasks.Task GetUserStatusAsync(int userId, CancellationToken cancellationToken = default) + public override async System.Threading.Tasks.Task GetUserStatusAsync(int userId, CancellationToken cancellationToken = default) { var url = $"{_baseUrl}/users/{userId}/status"; using var request = new HttpRequestMessage(HttpMethod.Get, url); @@ -2861,7 +2861,7 @@ public override async System.Threading.Tasks.Task GetUserStatusAsync(int switch ((int)response.StatusCode) { case 200: - return PachcaUtils.Deserialize(json); + return PachcaUtils.Deserialize(json).Data; case 401: throw PachcaUtils.Deserialize(json); default: diff --git a/sdk/csharp/generated/Models.cs b/sdk/csharp/generated/Models.cs index b134693ac..a7081b276 100644 --- a/sdk/csharp/generated/Models.cs +++ b/sdk/csharp/generated/Models.cs @@ -1815,46 +1815,92 @@ public override void Write(Utf8JsonWriter writer, WebhookEventType value, JsonSe } } -[JsonPolymorphic(TypeDiscriminatorPropertyName = "type")] -[JsonDerivedType(typeof(AuditDetailsEmpty), "")] -[JsonDerivedType(typeof(AuditDetailsUserUpdated), "")] -[JsonDerivedType(typeof(AuditDetailsRoleChanged), "")] -[JsonDerivedType(typeof(AuditDetailsTagName), "")] -[JsonDerivedType(typeof(AuditDetailsInitiator), "")] -[JsonDerivedType(typeof(AuditDetailsInviter), "")] -[JsonDerivedType(typeof(AuditDetailsChatRenamed), "")] -[JsonDerivedType(typeof(AuditDetailsChatPermission), "")] -[JsonDerivedType(typeof(AuditDetailsTagChat), "")] -[JsonDerivedType(typeof(AuditDetailsChatId), "")] -[JsonDerivedType(typeof(AuditDetailsTokenScopes), "")] -[JsonDerivedType(typeof(AuditDetailsKms), "")] -[JsonDerivedType(typeof(AuditDetailsDlp), "")] -[JsonDerivedType(typeof(AuditDetailsSearch), "")] -[JsonDerivedType(typeof(AuditDetailsBotScopes), "")] -[JsonDerivedType(typeof(AuditDetailsBotWebhookSettings), "")] -[JsonDerivedType(typeof(AuditDetailsVideoCall), "")] -[JsonDerivedType(typeof(AuditDetailsVideoCallRecording), "")] +[JsonConverter(typeof(AuditEventDetailsUnionConverter))] public abstract class AuditEventDetailsUnion { - [JsonPropertyName("type")] - public abstract string Type { get; } +} + +// AuditEventDetailsUnion carries no discriminator field: the member is chosen by which +// one best matches the payload keys (most recognised, then fewest unrecognised, +// then fewest declared). +internal sealed class AuditEventDetailsUnionConverter : JsonConverter +{ + private static readonly (Type Type, HashSet Keys)[] Shapes = + { + (typeof(AuditDetailsEmpty), new HashSet()), + (typeof(AuditDetailsUserUpdated), new HashSet { "changed_attrs" }), + (typeof(AuditDetailsRoleChanged), new HashSet { "new_company_role", "previous_company_role", "initiator_id" }), + (typeof(AuditDetailsTagName), new HashSet { "name" }), + (typeof(AuditDetailsInitiator), new HashSet { "initiator_id" }), + (typeof(AuditDetailsInviter), new HashSet { "inviter_id" }), + (typeof(AuditDetailsChatRenamed), new HashSet { "old_name", "new_name" }), + (typeof(AuditDetailsChatPermission), new HashSet { "public_access" }), + (typeof(AuditDetailsTagChat), new HashSet { "chat_id", "tag_name" }), + (typeof(AuditDetailsChatId), new HashSet { "chat_id" }), + (typeof(AuditDetailsTokenScopes), new HashSet { "scopes" }), + (typeof(AuditDetailsKms), new HashSet { "chat_id", "message_id", "reason" }), + (typeof(AuditDetailsDlp), new HashSet { "dlp_rule_id", "dlp_rule_name", "message_id", "chat_id", "user_id", "action_message", "conditions_matched" }), + (typeof(AuditDetailsSearch), new HashSet { "search_type", "query_present", "cursor_present", "limit", "filters" }), + (typeof(AuditDetailsBotScopes), new HashSet { "added_scopes", "removed_scopes" }), + (typeof(AuditDetailsBotWebhookSettings), new HashSet { "changes" }), + (typeof(AuditDetailsVideoCall), new HashSet { "chat_id", "duration", "max_members_count" }), + (typeof(AuditDetailsVideoCallRecording), new HashSet { "chat_id", "duration", "size" }), + }; + + public override AuditEventDetailsUnion Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + using var document = JsonDocument.ParseValue(ref reader); + var root = document.RootElement; + var keys = new HashSet(); + if (root.ValueKind == JsonValueKind.Object) + { + foreach (var property in root.EnumerateObject()) keys.Add(property.Name); + } + Type? best = null; + int bestMatched = 0, bestUnknown = 0, bestDeclared = 0; + foreach (var (type, shapeKeys) in Shapes) + { + var matched = 0; + foreach (var key in keys) + { + if (shapeKeys.Contains(key)) matched++; + } + var unknown = keys.Count - matched; + var declared = shapeKeys.Count; + var better = best is null + || matched > bestMatched + || (matched == bestMatched && unknown < bestUnknown) + || (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared); + if (better) + { + best = type; + bestMatched = matched; + bestUnknown = unknown; + bestDeclared = declared; + } + } + if (best is null) throw new JsonException("No AuditEventDetailsUnion member matched the payload"); + return (AuditEventDetailsUnion)JsonSerializer.Deserialize(root.GetRawText(), best, options)!; + } + + public override void Write(Utf8JsonWriter writer, AuditEventDetailsUnion value, JsonSerializerOptions options) + { + JsonSerializer.Serialize(writer, (object)value, value.GetType(), options); + } } public class AuditDetailsEmpty : AuditEventDetailsUnion { - public override string Type => ""; } public class AuditDetailsUserUpdated : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("changed_attrs")] public List ChangedAttrs { get; set; } = default!; } public class AuditDetailsRoleChanged : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("new_company_role")] public string NewCompanyRole { get; set; } = default!; [JsonPropertyName("previous_company_role")] @@ -1865,28 +1911,24 @@ public class AuditDetailsRoleChanged : AuditEventDetailsUnion public class AuditDetailsTagName : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("name")] public string Name { get; set; } = default!; } public class AuditDetailsInitiator : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("initiator_id")] public int InitiatorId { get; set; } = default!; } public class AuditDetailsInviter : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("inviter_id")] public int InviterId { get; set; } = default!; } public class AuditDetailsChatRenamed : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("old_name")] public string OldName { get; set; } = default!; [JsonPropertyName("new_name")] @@ -1895,14 +1937,12 @@ public class AuditDetailsChatRenamed : AuditEventDetailsUnion public class AuditDetailsChatPermission : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("public_access")] public bool PublicAccess { get; set; } = default!; } public class AuditDetailsTagChat : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("chat_id")] public int ChatId { get; set; } = default!; [JsonPropertyName("tag_name")] @@ -1911,21 +1951,18 @@ public class AuditDetailsTagChat : AuditEventDetailsUnion public class AuditDetailsChatId : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("chat_id")] public int ChatId { get; set; } = default!; } public class AuditDetailsTokenScopes : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("scopes")] public List Scopes { get; set; } = default!; } public class AuditDetailsKms : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("chat_id")] public int ChatId { get; set; } = default!; [JsonPropertyName("message_id")] @@ -1936,7 +1973,6 @@ public class AuditDetailsKms : AuditEventDetailsUnion public class AuditDetailsDlp : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("dlp_rule_id")] public int DlpRuleId { get; set; } = default!; [JsonPropertyName("dlp_rule_name")] @@ -1955,7 +1991,6 @@ public class AuditDetailsDlp : AuditEventDetailsUnion public class AuditDetailsSearch : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("search_type")] public string SearchType { get; set; } = default!; [JsonPropertyName("query_present")] @@ -1965,12 +2000,11 @@ public class AuditDetailsSearch : AuditEventDetailsUnion [JsonPropertyName("limit")] public int Limit { get; set; } = default!; [JsonPropertyName("filters")] - public Dictionary Filters { get; set; } = default!; + public Dictionary Filters { get; set; } = default!; } public class AuditDetailsBotScopes : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("added_scopes")] public List AddedScopes { get; set; } = default!; [JsonPropertyName("removed_scopes")] @@ -1979,14 +2013,12 @@ public class AuditDetailsBotScopes : AuditEventDetailsUnion public class AuditDetailsBotWebhookSettings : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("changes")] - public Dictionary Changes { get; set; } = default!; + public Dictionary Changes { get; set; } = default!; } public class AuditDetailsVideoCall : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("chat_id")] public int ChatId { get; set; } = default!; [JsonPropertyName("duration")] @@ -1997,7 +2029,6 @@ public class AuditDetailsVideoCall : AuditEventDetailsUnion public class AuditDetailsVideoCallRecording : AuditEventDetailsUnion { - public override string Type => ""; [JsonPropertyName("chat_id")] public int ChatId { get; set; } = default!; [JsonPropertyName("duration")] @@ -2299,7 +2330,7 @@ public class ViewSubmitWebhookPayload : WebhookPayloadUnion [JsonPropertyName("user_id")] public int UserId { get; set; } = default!; [JsonPropertyName("data")] - public Dictionary Data { get; set; } = default!; + public Dictionary Data { get; set; } = default!; [JsonPropertyName("webhook_timestamp")] public int WebhookTimestamp { get; set; } = default!; } @@ -2448,7 +2479,7 @@ public class ApiErrorItem [JsonPropertyName("code")] public ValidationErrorCode Code { get; set; } = default!; [JsonPropertyName("payload")] - public Dictionary? Payload { get; set; } + public Dictionary? Payload { get; set; } } public class AuditEvent @@ -2708,7 +2739,7 @@ public class CustomProperty [JsonPropertyName("data_type")] public CustomPropertyDataType DataType { get; set; } = default!; [JsonPropertyName("value")] - public string Value { get; set; } = default!; + public string? Value { get; set; } } public class CustomPropertyDefinition @@ -3046,7 +3077,7 @@ public class Reaction [JsonPropertyName("code")] public string Code { get; set; } = default!; [JsonPropertyName("name")] - public string? Name { get; set; } + public string Name { get; set; } = default!; } public class ReactionRequest @@ -3236,7 +3267,7 @@ public class User [JsonPropertyName("id")] public int Id { get; set; } = default!; [JsonPropertyName("first_name")] - public string FirstName { get; set; } = default!; + public string? FirstName { get; set; } [JsonPropertyName("last_name")] public string? LastName { get; set; } [JsonPropertyName("nickname")] @@ -3677,16 +3708,16 @@ public class UserDataWrapper public User Data { get; set; } = default!; } -public class AvatarDataDataWrapper +public class UserStatusDataWrapper { [JsonPropertyName("data")] - public AvatarData Data { get; set; } = default!; + public UserStatus Data { get; set; } = default!; } -public class UserStatusDataWrapper +public class AvatarDataDataWrapper { [JsonPropertyName("data")] - public UserStatus Data { get; set; } = default!; + public AvatarData Data { get; set; } = default!; } public class TaskDataWrapper diff --git a/sdk/csharp/generated/examples.json b/sdk/csharp/generated/examples.json index 5eb39b03c..c1f3584c8 100644 --- a/sdk/csharp/generated/examples.json +++ b/sdk/csharp/generated/examples.json @@ -6,7 +6,7 @@ ] }, "SecurityOperations_getAuditEvents": { - "usage": "var response = await client.Security.GetAuditEventsAsync(DateTimeOffset.Parse(\"2025-05-01T09:11:00Z\"), DateTimeOffset.Parse(\"2025-05-02T09:11:00Z\"), AuditEventKey.UserLogin, \"98765\", \"User\", \"98765\", \"User\", 1, \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\");", + "usage": "var response = await client.Security.GetAuditEventsAsync(DateTimeOffset.Parse(\"2025-05-01T09:11:00.000Z\"), DateTimeOffset.Parse(\"2025-05-02T09:11:00.000Z\"), AuditEventKey.UserLogin, \"98765\", \"User\", \"98765\", \"User\", 1, \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\");", "output": "GetAuditEventsResponse(Data: List, Meta: PaginationMeta)", "imports": [ "AuditEventKey" @@ -263,7 +263,7 @@ }, "ReactionOperations_addReaction": { "usage": "var request = new ReactionRequest { Code = \"👍\", Name = \":+1:\" };\nvar response = await client.Reactions.AddReactionAsync(7231942, request);", - "output": "Reaction(UserId: int, CreatedAt: DateTimeOffset, Code: string, Name: string?)", + "output": "Reaction(UserId: int, CreatedAt: DateTimeOffset, Code: string, Name: string)", "imports": [ "ReactionRequest" ] @@ -297,11 +297,11 @@ }, "ProfileOperations_getProfile": { "usage": "var response = await client.Profile.GetProfileAsync();", - "output": "User(Id: int, FirstName: string, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)" + "output": "User(Id: int, FirstName: string?, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)" }, "ProfileOperations_getStatus": { "usage": "var response = await client.Profile.GetStatusAsync();", - "output": "object" + "output": "UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)" }, "ProfileAvatarOperations_updateProfileAvatar": { "usage": "var response = await client.Profile.UpdateProfileAvatarAsync(Array.Empty());", @@ -352,11 +352,11 @@ }, "TaskOperations_getTask": { "usage": "var response = await client.Tasks.GetTaskAsync(22283);", - "output": "Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List)" + "output": "Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List)" }, "TaskOperations_createTask": { "usage": "var request = new TaskCreateRequest\n{\n Task = new TaskCreateRequestTask\n {\n Kind = TaskKind.Reminder,\n Content = \"Забрать со склада 21 заказ\",\n DueAt = DateTimeOffset.Parse(\"2020-06-05T12:00:00.000+03:00\"),\n Priority = 2,\n PerformerIds = new List { 123 },\n ChatId = 456,\n AllDay = false,\n CustomProperties = new List { new TaskCreateRequestCustomProperty { Id = 78, Value = \"Синий склад\" } }\n }\n};\nvar response = await client.Tasks.CreateTaskAsync(request);", - "output": "Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List)", + "output": "Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List)", "imports": [ "TaskCreateRequest", "TaskCreateRequestCustomProperty", @@ -366,7 +366,7 @@ }, "TaskOperations_updateTask": { "usage": "var request = new TaskUpdateRequest\n{\n Task = new TaskUpdateRequestTask\n {\n Kind = TaskKind.Reminder,\n Content = \"Забрать со склада 21 заказ\",\n DueAt = DateTimeOffset.Parse(\"2020-06-05T12:00:00.000+03:00\"),\n Priority = 2,\n PerformerIds = new List { 123 },\n Status = TaskStatus.Done,\n AllDay = false,\n DoneAt = DateTimeOffset.Parse(\"2020-06-05T12:00:00.000Z\"),\n CustomProperties = new List { new TaskUpdateRequestCustomProperty { Id = 78, Value = \"Синий склад\" } }\n }\n};\nvar response = await client.Tasks.UpdateTaskAsync(22283, request);", - "output": "Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List)", + "output": "Task(Id: int, Kind: TaskKind, Content: string, DueAt: DateTimeOffset?, Priority: int, UserId: int, ChatId: int?, Status: TaskStatus, CreatedAt: DateTimeOffset, PerformerIds: List, AllDay: bool, CustomProperties: List)", "imports": [ "TaskKind", "TaskStatus", @@ -384,15 +384,15 @@ }, "UserOperations_getUser": { "usage": "var response = await client.Users.GetUserAsync(12);", - "output": "User(Id: int, FirstName: string, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)" + "output": "User(Id: int, FirstName: string?, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)" }, "UserStatusOperations_getUserStatus": { "usage": "var response = await client.Users.GetUserStatusAsync(12);", - "output": "object" + "output": "UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)" }, "UserOperations_createUser": { "usage": "var request = new UserCreateRequest\n{\n User = new UserCreateRequestUser\n {\n FirstName = \"Олег\",\n LastName = \"Петров\",\n Email = \"olegp@example.com\",\n PhoneNumber = \"+79001234567\",\n Nickname = \"olegpetrov\",\n Department = \"Продукт\",\n Title = \"CIO\",\n Role = UserCreateRole.User,\n Suspended = false,\n ListTags = new List { \"example\" },\n ChatIds = new List { 123 },\n CustomProperties = new List { new UserCreateRequestCustomProperty { Id = 1678, Value = \"Санкт-Петербург\" } }\n },\n SkipEmailNotify = false\n};\nvar response = await client.Users.CreateUserAsync(request);", - "output": "User(Id: int, FirstName: string, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)", + "output": "User(Id: int, FirstName: string?, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)", "imports": [ "UserCreateRequest", "UserCreateRequestCustomProperty", @@ -402,7 +402,7 @@ }, "UserOperations_updateUser": { "usage": "var request = new UserUpdateRequest\n{\n User = new UserUpdateRequestUser\n {\n FirstName = \"Олег\",\n LastName = \"Петров\",\n Email = \"olegpetrov@example.com\",\n PhoneNumber = \"+79001234567\",\n Nickname = \"olegpetrov\",\n Department = \"Отдел разработки\",\n Title = \"Старший разработчик\",\n Role = UserRoleInput.User,\n Suspended = false,\n ListTags = new List { \"example\" },\n CustomProperties = new List { new UserUpdateRequestCustomProperty { Id = 1678, Value = \"Санкт-Петербург\" } }\n }\n};\nvar response = await client.Users.UpdateUserAsync(12, request);", - "output": "User(Id: int, FirstName: string, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)", + "output": "User(Id: int, FirstName: string?, LastName: string?, Nickname: string, Email: string?, PhoneNumber: string?, Department: string?, Title: string?, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterId: int?, ListTags: List, CustomProperties: List, UserStatus: UserStatus(Emoji: string, Title: string, ExpiresAt: DateTimeOffset?, IsAway: bool, AwayMessage: UserStatusAwayMessage(Text: string)?)?, Bot: bool, Sso: bool, CreatedAt: DateTimeOffset, LastActivityAt: DateTimeOffset?, TimeZone: string?, ImageUrl: string?)", "imports": [ "UserRoleInput", "UserUpdateRequest", @@ -432,7 +432,7 @@ "usage": "await client.Users.DeleteUserStatusAsync(12);" }, "FormOperations_openView": { - "usage": "var request = new OpenViewRequest\n{\n TriggerId = \"791a056b-006c-49dd-834b-c633fde52fe8\",\n PrivateMetadata = \"{\\\"timeoff_id\\\":4378}\",\n CallbackId = \"timeoff_reguest_form\",\n View = new OpenViewRequestView\n {\n Title = \"Уведомление об отпуске\",\n CloseText = \"Закрыть\",\n SubmitText = \"Отправить заявку\",\n Blocks = new List { new ViewBlockHeader { Text = \"Основная информация\" } }\n }\n};\nawait client.Views.OpenViewAsync(request);", + "usage": "var request = new OpenViewRequest\n{\n TriggerId = \"791a056b-006c-49dd-834b-c633fde52fe8\",\n PrivateMetadata = \"{\\\"timeoff_id\\\":4378}\",\n CallbackId = \"timeoff_request_form\",\n View = new OpenViewRequestView\n {\n Title = \"Уведомление об отпуске\",\n CloseText = \"Закрыть\",\n SubmitText = \"Отправить заявку\",\n Blocks = new List { new ViewBlockHeader { Text = \"Основная информация\" } }\n }\n};\nawait client.Views.OpenViewAsync(request);", "imports": [ "OpenViewRequest", "OpenViewRequestView", diff --git a/sdk/go/examples/upload.go b/sdk/go/examples/upload.go index 6d59eca37..f93e97dc8 100644 --- a/sdk/go/examples/upload.go +++ b/sdk/go/examples/upload.go @@ -60,7 +60,7 @@ func main() { // ── Step 3: Upload the file via SDK ───────────────────────────── fmt.Println("3. Uploading file...") err = client.Common.UploadFile(ctx, params.DirectURL, pachca.FileUploadRequest{ - Content_Disposition: params.Content_Disposition, + ContentDisposition: params.ContentDisposition, ACL: params.ACL, Policy: params.Policy, XAMZCredential: params.XAMZCredential, diff --git a/sdk/go/examples/webhook_history.go b/sdk/go/examples/webhook_history.go index 2e0c4f563..5ed206ab9 100644 --- a/sdk/go/examples/webhook_history.go +++ b/sdk/go/examples/webhook_history.go @@ -64,6 +64,9 @@ func summarizePayload(payload pachca.WebhookPayloadUnion) string { case payload.CompanyMemberWebhookPayload != nil: p := payload.CompanyMemberWebhookPayload return fmt.Sprintf("company_member event=%s users=%d", p.Event, len(p.UserIDs)) + case payload.VideoCallWebhookPayload != nil: + p := payload.VideoCallWebhookPayload + return fmt.Sprintf("video_call event=%s chat_id=%d room_id=%d", p.Event, p.ChatID, p.VideoRoomID) default: return "unknown" } diff --git a/sdk/go/generated/client.go b/sdk/go/generated/client.go index 9ce8cdc1f..2248f053a 100644 --- a/sdk/go/generated/client.go +++ b/sdk/go/generated/client.go @@ -2758,7 +2758,7 @@ func (s *OAuthServiceImpl) GetTokenInfo(ctx context.Context) (*AccessTokenInfo, type ProfileService interface { GetProfile(ctx context.Context) (*User, error) - GetStatus(ctx context.Context) (*any, error) + GetStatus(ctx context.Context) (*UserStatus, error) UpdateProfileAvatar(ctx context.Context, image io.Reader) (*AvatarData, error) UpdateStatus(ctx context.Context, request StatusUpdateRequest) (*UserStatus, error) DeleteProfileAvatar(ctx context.Context) error @@ -2772,7 +2772,7 @@ func (s *ProfileServiceStub) GetProfile(ctx context.Context) (*User, error) { return nil, NotImplementedError{Method: "Profile.getProfile"} } -func (s *ProfileServiceStub) GetStatus(ctx context.Context) (*any, error) { +func (s *ProfileServiceStub) GetStatus(ctx context.Context) (*UserStatus, error) { return nil, NotImplementedError{Method: "Profile.getStatus"} } @@ -2835,7 +2835,7 @@ func (s *ProfileServiceImpl) GetProfile(ctx context.Context) (*User, error) { } } -func (s *ProfileServiceImpl) GetStatus(ctx context.Context) (*any, error) { +func (s *ProfileServiceImpl) GetStatus(ctx context.Context) (*UserStatus, error) { req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/profile/status", s.baseURL), nil) if err != nil { return nil, err @@ -2847,11 +2847,13 @@ func (s *ProfileServiceImpl) GetStatus(ctx context.Context) (*any, error) { defer resp.Body.Close() switch resp.StatusCode { case http.StatusOK: - var result any + var result struct { + Data UserStatus `json:"data"` + } if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { return nil, err } - return &result, nil + return &result.Data, nil case http.StatusUnauthorized: var e OAuthError if err := json.NewDecoder(resp.Body).Decode(&e); err != nil { @@ -3604,7 +3606,7 @@ type UsersService interface { ListUsers(ctx context.Context, params *ListUsersParams) (*ListUsersResponse, error) ListUsersAll(ctx context.Context, params *ListUsersParams) ([]User, error) GetUser(ctx context.Context, id int32) (*User, error) - GetUserStatus(ctx context.Context, userId int32) (*any, error) + GetUserStatus(ctx context.Context, userId int32) (*UserStatus, error) CreateUser(ctx context.Context, request UserCreateRequest) (*User, error) UpdateUser(ctx context.Context, id int32, request UserUpdateRequest) (*User, error) UpdateUserAvatar(ctx context.Context, userId int32, image io.Reader) (*AvatarData, error) @@ -3628,7 +3630,7 @@ func (s *UsersServiceStub) GetUser(ctx context.Context, id int32) (*User, error) return nil, NotImplementedError{Method: "Users.getUser"} } -func (s *UsersServiceStub) GetUserStatus(ctx context.Context, userId int32) (*any, error) { +func (s *UsersServiceStub) GetUserStatus(ctx context.Context, userId int32) (*UserStatus, error) { return nil, NotImplementedError{Method: "Users.getUserStatus"} } @@ -3772,7 +3774,7 @@ func (s *UsersServiceImpl) GetUser(ctx context.Context, id int32) (*User, error) } } -func (s *UsersServiceImpl) GetUserStatus(ctx context.Context, userId int32) (*any, error) { +func (s *UsersServiceImpl) GetUserStatus(ctx context.Context, userId int32) (*UserStatus, error) { req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/users/%v/status", s.baseURL, userId), nil) if err != nil { return nil, err @@ -3784,11 +3786,13 @@ func (s *UsersServiceImpl) GetUserStatus(ctx context.Context, userId int32) (*an defer resp.Body.Close() switch resp.StatusCode { case http.StatusOK: - var result any + var result struct { + Data UserStatus `json:"data"` + } if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { return nil, err } - return &result, nil + return &result.Data, nil case http.StatusUnauthorized: var e OAuthError if err := json.NewDecoder(resp.Body).Decode(&e); err != nil { diff --git a/sdk/go/generated/examples.json b/sdk/go/generated/examples.json index 5cc152c38..d25aaeeb2 100644 --- a/sdk/go/generated/examples.json +++ b/sdk/go/generated/examples.json @@ -6,7 +6,7 @@ ] }, "SecurityOperations_getAuditEvents": { - "usage": "params := &GetAuditEventsParams{\n\tStartTime: Ptr(\"2025-05-01T09:11:00Z\"),\n\tEndTime: Ptr(\"2025-05-02T09:11:00Z\"),\n\tEventKey: Ptr(AuditEventKeyUserLogin),\n\tActorID: Ptr(\"98765\"),\n\tActorType: Ptr(\"User\"),\n\tEntityID: Ptr(\"98765\"),\n\tEntityType: Ptr(\"User\"),\n\tLimit: Ptr(int32(1)),\n\tCursor: Ptr(\"eyJpZCI6MTAsImRpciI6ImFzYyJ9\"),\n}\nresponse, err := client.Security.GetAuditEvents(ctx, params)", + "usage": "params := &GetAuditEventsParams{\n\tStartTime: Ptr(\"2025-05-01T09:11:00.000Z\"),\n\tEndTime: Ptr(\"2025-05-02T09:11:00.000Z\"),\n\tEventKey: Ptr(AuditEventKeyUserLogin),\n\tActorID: Ptr(\"98765\"),\n\tActorType: Ptr(\"User\"),\n\tEntityID: Ptr(\"98765\"),\n\tEntityType: Ptr(\"User\"),\n\tLimit: Ptr(int32(1)),\n\tCursor: Ptr(\"eyJpZCI6MTAsImRpciI6ImFzYyJ9\"),\n}\nresponse, err := client.Security.GetAuditEvents(ctx, params)", "output": "GetAuditEventsResponse{Data: []AuditEvent, Meta: PaginationMeta}", "imports": [ "AuditEventKey", @@ -280,7 +280,7 @@ }, "ReactionOperations_addReaction": { "usage": "request := ReactionRequest{\n\tCode: \"👍\",\n\tName: Ptr(\":+1:\"),\n}\nresponse, err := client.Reactions.AddReaction(ctx, int32(7231942), request)", - "output": "Reaction{UserID: int32, CreatedAt: string, Code: string, Name: *string}", + "output": "Reaction{UserID: int32, CreatedAt: string, Code: string, Name: string}", "imports": [ "ReactionRequest" ] @@ -323,11 +323,11 @@ }, "ProfileOperations_getProfile": { "usage": "response, err := client.Profile.GetProfile(ctx)", - "output": "User{ID: int32, FirstName: string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}" + "output": "User{ID: int32, FirstName: *string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}" }, "ProfileOperations_getStatus": { "usage": "response, err := client.Profile.GetStatus(ctx)", - "output": "any" + "output": "UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}" }, "ProfileAvatarOperations_updateProfileAvatar": { "usage": "response, err := client.Profile.UpdateProfileAvatar(ctx, bytes.NewReader(nil))", @@ -384,11 +384,11 @@ }, "TaskOperations_getTask": { "usage": "response, err := client.Tasks.GetTask(ctx, int32(22283))", - "output": "Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}}" + "output": "Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}}" }, "TaskOperations_createTask": { "usage": "request := TaskCreateRequest{\n\tTask: TaskCreateRequestTask{\n\t\tKind: TaskKindReminder,\n\t\tContent: Ptr(\"Забрать со склада 21 заказ\"),\n\t\tDueAt: Ptr(\"2020-06-05T12:00:00.000+03:00\"),\n\t\tPriority: Ptr(int32(2)),\n\t\tPerformerIDs: []int32{int32(123)},\n\t\tChatID: Ptr(int32(456)),\n\t\tAllDay: Ptr(false),\n\t\tCustomProperties: []TaskCreateRequestCustomProperty{TaskCreateRequestCustomProperty{\n\t\t\tID: int32(78),\n\t\t\tValue: \"Синий склад\",\n\t\t}},\n\t},\n}\nresponse, err := client.Tasks.CreateTask(ctx, request)", - "output": "Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}}", + "output": "Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}}", "imports": [ "TaskCreateRequest", "TaskCreateRequestCustomProperty", @@ -398,7 +398,7 @@ }, "TaskOperations_updateTask": { "usage": "request := TaskUpdateRequest{\n\tTask: TaskUpdateRequestTask{\n\t\tKind: Ptr(TaskKindReminder),\n\t\tContent: Ptr(\"Забрать со склада 21 заказ\"),\n\t\tDueAt: Ptr(\"2020-06-05T12:00:00.000+03:00\"),\n\t\tPriority: Ptr(int32(2)),\n\t\tPerformerIDs: []int32{int32(123)},\n\t\tStatus: Ptr(TaskStatusDone),\n\t\tAllDay: Ptr(false),\n\t\tDoneAt: Ptr(\"2020-06-05T12:00:00.000Z\"),\n\t\tCustomProperties: []TaskUpdateRequestCustomProperty{TaskUpdateRequestCustomProperty{\n\t\t\tID: int32(78),\n\t\t\tValue: \"Синий склад\",\n\t\t}},\n\t},\n}\nresponse, err := client.Tasks.UpdateTask(ctx, int32(22283), request)", - "output": "Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}}", + "output": "Task{ID: int32, Kind: TaskKind, Content: string, DueAt: *string, Priority: int32, UserID: int32, ChatID: *int32, Status: TaskStatus, CreatedAt: string, PerformerIDs: []int32, AllDay: bool, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}}", "imports": [ "TaskKind", "TaskStatus", @@ -419,15 +419,15 @@ }, "UserOperations_getUser": { "usage": "response, err := client.Users.GetUser(ctx, int32(12))", - "output": "User{ID: int32, FirstName: string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}" + "output": "User{ID: int32, FirstName: *string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}" }, "UserStatusOperations_getUserStatus": { "usage": "response, err := client.Users.GetUserStatus(ctx, int32(12))", - "output": "any" + "output": "UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}" }, "UserOperations_createUser": { "usage": "request := UserCreateRequest{\n\tUser: UserCreateRequestUser{\n\t\tFirstName: Ptr(\"Олег\"),\n\t\tLastName: Ptr(\"Петров\"),\n\t\tEmail: \"olegp@example.com\",\n\t\tPhoneNumber: Ptr(\"+79001234567\"),\n\t\tNickname: Ptr(\"olegpetrov\"),\n\t\tDepartment: Ptr(\"Продукт\"),\n\t\tTitle: Ptr(\"CIO\"),\n\t\tRole: Ptr(UserCreateRoleUser),\n\t\tSuspended: Ptr(false),\n\t\tListTags: []string{\"example\"},\n\t\tChatIDs: []int32{int32(123)},\n\t\tCustomProperties: []UserCreateRequestCustomProperty{UserCreateRequestCustomProperty{\n\t\t\tID: int32(1678),\n\t\t\tValue: \"Санкт-Петербург\",\n\t\t}},\n\t},\n\tSkipEmailNotify: Ptr(false),\n}\nresponse, err := client.Users.CreateUser(ctx, request)", - "output": "User{ID: int32, FirstName: string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}", + "output": "User{ID: int32, FirstName: *string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}", "imports": [ "UserCreateRequest", "UserCreateRequestCustomProperty", @@ -437,7 +437,7 @@ }, "UserOperations_updateUser": { "usage": "request := UserUpdateRequest{\n\tUser: UserUpdateRequestUser{\n\t\tFirstName: Ptr(\"Олег\"),\n\t\tLastName: Ptr(\"Петров\"),\n\t\tEmail: Ptr(\"olegpetrov@example.com\"),\n\t\tPhoneNumber: Ptr(\"+79001234567\"),\n\t\tNickname: Ptr(\"olegpetrov\"),\n\t\tDepartment: Ptr(\"Отдел разработки\"),\n\t\tTitle: Ptr(\"Старший разработчик\"),\n\t\tRole: Ptr(UserRoleInputUser),\n\t\tSuspended: Ptr(false),\n\t\tListTags: []string{\"example\"},\n\t\tCustomProperties: []UserUpdateRequestCustomProperty{UserUpdateRequestCustomProperty{\n\t\t\tID: int32(1678),\n\t\t\tValue: \"Санкт-Петербург\",\n\t\t}},\n\t},\n}\nresponse, err := client.Users.UpdateUser(ctx, int32(12), request)", - "output": "User{ID: int32, FirstName: string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}", + "output": "User{ID: int32, FirstName: *string, LastName: *string, Nickname: string, Email: *string, PhoneNumber: *string, Department: *string, Title: *string, Role: UserRole, Suspended: bool, InviteStatus: InviteStatus, InviterID: *int32, ListTags: []string, CustomProperties: []CustomProperty{ID: int32, Name: string, DataType: CustomPropertyDataType, Value: *string}, UserStatus: *UserStatus{Emoji: string, Title: string, ExpiresAt: *string, IsAway: bool, AwayMessage: *UserStatusAwayMessage{Text: string}}, Bot: bool, Sso: bool, CreatedAt: string, LastActivityAt: *string, TimeZone: *string, ImageURL: *string}", "imports": [ "UserRoleInput", "UserUpdateRequest", @@ -467,7 +467,7 @@ "usage": "client.Users.DeleteUserStatus(ctx, int32(12))" }, "FormOperations_openView": { - "usage": "request := OpenViewRequest{\n\tType: \"modal\",\n\tTriggerID: \"791a056b-006c-49dd-834b-c633fde52fe8\",\n\tPrivateMetadata: Ptr(\"{\\\"timeoff_id\\\":4378}\"),\n\tCallbackID: Ptr(\"timeoff_reguest_form\"),\n\tView: OpenViewRequestView{\n\t\tTitle: \"Уведомление об отпуске\",\n\t\tCloseText: Ptr(\"Закрыть\"),\n\t\tSubmitText: Ptr(\"Отправить заявку\"),\n\t\tBlocks: []ViewBlockUnion{ViewBlockHeader{\n\t\t\tType: \"header\",\n\t\t\tText: \"Основная информация\",\n\t\t}},\n\t},\n}\nclient.Views.OpenView(ctx, request)", + "usage": "request := OpenViewRequest{\n\tType: \"modal\",\n\tTriggerID: \"791a056b-006c-49dd-834b-c633fde52fe8\",\n\tPrivateMetadata: Ptr(\"{\\\"timeoff_id\\\":4378}\"),\n\tCallbackID: Ptr(\"timeoff_request_form\"),\n\tView: OpenViewRequestView{\n\t\tTitle: \"Уведомление об отпуске\",\n\t\tCloseText: Ptr(\"Закрыть\"),\n\t\tSubmitText: Ptr(\"Отправить заявку\"),\n\t\tBlocks: []ViewBlockUnion{ViewBlockHeader{\n\t\t\tType: \"header\",\n\t\t\tText: \"Основная информация\",\n\t\t}},\n\t},\n}\nclient.Views.OpenView(ctx, request)", "imports": [ "OpenViewRequest", "OpenViewRequestView", diff --git a/sdk/go/generated/types.go b/sdk/go/generated/types.go index 7836cd808..674bd342d 100644 --- a/sdk/go/generated/types.go +++ b/sdk/go/generated/types.go @@ -448,7 +448,7 @@ type ApiErrorItem struct { Message string `json:"message"` Code ValidationErrorCode `json:"code"` Value *string `json:"value"` - Payload map[string]string `json:"payload"` + Payload map[string]any `json:"payload"` } type AuditDetailsBotScopes struct { @@ -457,7 +457,7 @@ type AuditDetailsBotScopes struct { } type AuditDetailsBotWebhookSettings struct { - Changes map[string]string `json:"changes"` + Changes map[string]any `json:"changes"` } type AuditDetailsChatId struct { @@ -507,11 +507,11 @@ type AuditDetailsRoleChanged struct { } type AuditDetailsSearch struct { - SearchType string `json:"search_type"` - QueryPresent bool `json:"query_present"` - CursorPresent bool `json:"cursor_present"` - Limit int32 `json:"limit"` - Filters map[string]string `json:"filters"` + SearchType string `json:"search_type"` + QueryPresent bool `json:"query_present"` + CursorPresent bool `json:"cursor_present"` + Limit int32 `json:"limit"` + Filters map[string]any `json:"filters"` } type AuditDetailsTagChat struct { @@ -786,7 +786,7 @@ type CustomProperty struct { ID int32 `json:"id"` Name string `json:"name"` DataType CustomPropertyDataType `json:"data_type"` - Value string `json:"value"` + Value *string `json:"value"` } type CustomPropertyDefinition struct { @@ -1067,7 +1067,7 @@ type Reaction struct { UserID int32 `json:"user_id"` CreatedAt time.Time `json:"created_at"` Code string `json:"code"` - Name *string `json:"name"` + Name string `json:"name"` } type ReactionRequest struct { @@ -1228,7 +1228,6 @@ type UploadParams struct { type User struct { ID int32 `json:"id"` - FirstName string `json:"first_name"` Nickname string `json:"nickname"` Role UserRole `json:"role"` Suspended bool `json:"suspended"` @@ -1238,6 +1237,7 @@ type User struct { Bot bool `json:"bot"` Sso bool `json:"sso"` CreatedAt time.Time `json:"created_at"` + FirstName *string `json:"first_name"` LastName *string `json:"last_name"` Email *string `json:"email"` PhoneNumber *string `json:"phone_number"` @@ -1565,14 +1565,14 @@ type ViewBlockTime struct { } type ViewSubmitWebhookPayload struct { - Type string `json:"type"` // always "view" - Event string `json:"event"` // always "submit" - UserID int32 `json:"user_id"` - Data map[string]string `json:"data"` - WebhookTimestamp int32 `json:"webhook_timestamp"` - CallbackID *string `json:"callback_id"` - PrivateMetadata *string `json:"private_metadata"` - ChatID *int32 `json:"chat_id"` + Type string `json:"type"` // always "view" + Event string `json:"event"` // always "submit" + UserID int32 `json:"user_id"` + Data map[string]any `json:"data"` + WebhookTimestamp int32 `json:"webhook_timestamp"` + CallbackID *string `json:"callback_id"` + PrivateMetadata *string `json:"private_metadata"` + ChatID *int32 `json:"chat_id"` } type VoiceContent struct { @@ -1620,6 +1620,41 @@ type UpdateUserAvatarRequest struct { Image io.Reader `json:"image"` } +// unionMemberShape lists the JSON keys one member of an undiscriminated union declares. +type unionMemberShape struct { + keys map[string]struct{} +} + +// pickUnionMember selects the member that best fits the payload: most keys +// recognised, then fewest unrecognised, then fewest declared. Returns -1 when +// the payload is not a JSON object. +func pickUnionMember(data []byte, shapes []unionMemberShape) int { + var raw map[string]json.RawMessage + if err := json.Unmarshal(data, &raw); err != nil { + return -1 + } + best := -1 + bestMatched, bestUnknown, bestDeclared := 0, 0, 0 + for i, shape := range shapes { + matched := 0 + for k := range raw { + if _, ok := shape.keys[k]; ok { + matched++ + } + } + unknown := len(raw) - matched + declared := len(shape.keys) + better := best == -1 || + matched > bestMatched || + (matched == bestMatched && unknown < bestUnknown) || + (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared) + if better { + best, bestMatched, bestUnknown, bestDeclared = i, matched, unknown, declared + } + } + return best +} + type AuditEventDetailsUnion struct { AuditDetailsEmpty *AuditDetailsEmpty AuditDetailsUserUpdated *AuditDetailsUserUpdated @@ -1639,73 +1674,92 @@ type AuditEventDetailsUnion struct { AuditDetailsBotWebhookSettings *AuditDetailsBotWebhookSettings AuditDetailsVideoCall *AuditDetailsVideoCall AuditDetailsVideoCallRecording *AuditDetailsVideoCallRecording -} - + Raw json.RawMessage +} + +var auditEventDetailsUnionShapes = []unionMemberShape{ + {keys: map[string]struct{}{}}, + {keys: map[string]struct{}{"changed_attrs": {}}}, + {keys: map[string]struct{}{"new_company_role": {}, "previous_company_role": {}, "initiator_id": {}}}, + {keys: map[string]struct{}{"name": {}}}, + {keys: map[string]struct{}{"initiator_id": {}}}, + {keys: map[string]struct{}{"inviter_id": {}}}, + {keys: map[string]struct{}{"old_name": {}, "new_name": {}}}, + {keys: map[string]struct{}{"public_access": {}}}, + {keys: map[string]struct{}{"chat_id": {}, "tag_name": {}}}, + {keys: map[string]struct{}{"chat_id": {}}}, + {keys: map[string]struct{}{"scopes": {}}}, + {keys: map[string]struct{}{"chat_id": {}, "message_id": {}, "reason": {}}}, + {keys: map[string]struct{}{"dlp_rule_id": {}, "dlp_rule_name": {}, "message_id": {}, "chat_id": {}, "user_id": {}, "action_message": {}, "conditions_matched": {}}}, + {keys: map[string]struct{}{"search_type": {}, "query_present": {}, "cursor_present": {}, "limit": {}, "filters": {}}}, + {keys: map[string]struct{}{"added_scopes": {}, "removed_scopes": {}}}, + {keys: map[string]struct{}{"changes": {}}}, + {keys: map[string]struct{}{"chat_id": {}, "duration": {}, "max_members_count": {}}}, + {keys: map[string]struct{}{"chat_id": {}, "duration": {}, "size": {}}}, +} + +// UnmarshalJSON decodes AuditEventDetailsUnion, which carries no discriminator field: +// the member is chosen by which one best matches the payload keys. The raw +// payload is always kept in Raw so an unrecognised shape is never a decode error. func (u *AuditEventDetailsUnion) UnmarshalJSON(data []byte) error { - var disc struct { - Type string `json:"type"` - } - if err := json.Unmarshal(data, &disc); err != nil { - return err - } - switch disc.Type { - case "AuditDetailsEmpty": + u.Raw = append(json.RawMessage(nil), data...) + switch pickUnionMember(data, auditEventDetailsUnionShapes) { + case 0: u.AuditDetailsEmpty = &AuditDetailsEmpty{} return json.Unmarshal(data, u.AuditDetailsEmpty) - case "AuditDetailsUserUpdated": + case 1: u.AuditDetailsUserUpdated = &AuditDetailsUserUpdated{} return json.Unmarshal(data, u.AuditDetailsUserUpdated) - case "AuditDetailsRoleChanged": + case 2: u.AuditDetailsRoleChanged = &AuditDetailsRoleChanged{} return json.Unmarshal(data, u.AuditDetailsRoleChanged) - case "AuditDetailsTagName": + case 3: u.AuditDetailsTagName = &AuditDetailsTagName{} return json.Unmarshal(data, u.AuditDetailsTagName) - case "AuditDetailsInitiator": + case 4: u.AuditDetailsInitiator = &AuditDetailsInitiator{} return json.Unmarshal(data, u.AuditDetailsInitiator) - case "AuditDetailsInviter": + case 5: u.AuditDetailsInviter = &AuditDetailsInviter{} return json.Unmarshal(data, u.AuditDetailsInviter) - case "AuditDetailsChatRenamed": + case 6: u.AuditDetailsChatRenamed = &AuditDetailsChatRenamed{} return json.Unmarshal(data, u.AuditDetailsChatRenamed) - case "AuditDetailsChatPermission": + case 7: u.AuditDetailsChatPermission = &AuditDetailsChatPermission{} return json.Unmarshal(data, u.AuditDetailsChatPermission) - case "AuditDetailsTagChat": + case 8: u.AuditDetailsTagChat = &AuditDetailsTagChat{} return json.Unmarshal(data, u.AuditDetailsTagChat) - case "AuditDetailsChatId": + case 9: u.AuditDetailsChatId = &AuditDetailsChatId{} return json.Unmarshal(data, u.AuditDetailsChatId) - case "AuditDetailsTokenScopes": + case 10: u.AuditDetailsTokenScopes = &AuditDetailsTokenScopes{} return json.Unmarshal(data, u.AuditDetailsTokenScopes) - case "AuditDetailsKms": + case 11: u.AuditDetailsKms = &AuditDetailsKms{} return json.Unmarshal(data, u.AuditDetailsKms) - case "AuditDetailsDlp": + case 12: u.AuditDetailsDlp = &AuditDetailsDlp{} return json.Unmarshal(data, u.AuditDetailsDlp) - case "AuditDetailsSearch": + case 13: u.AuditDetailsSearch = &AuditDetailsSearch{} return json.Unmarshal(data, u.AuditDetailsSearch) - case "AuditDetailsBotScopes": + case 14: u.AuditDetailsBotScopes = &AuditDetailsBotScopes{} return json.Unmarshal(data, u.AuditDetailsBotScopes) - case "AuditDetailsBotWebhookSettings": + case 15: u.AuditDetailsBotWebhookSettings = &AuditDetailsBotWebhookSettings{} return json.Unmarshal(data, u.AuditDetailsBotWebhookSettings) - case "AuditDetailsVideoCall": + case 16: u.AuditDetailsVideoCall = &AuditDetailsVideoCall{} return json.Unmarshal(data, u.AuditDetailsVideoCall) - case "AuditDetailsVideoCallRecording": + case 17: u.AuditDetailsVideoCallRecording = &AuditDetailsVideoCallRecording{} return json.Unmarshal(data, u.AuditDetailsVideoCallRecording) - default: - return fmt.Errorf("unknown AuditEventDetailsUnion type: %s", disc.Type) } + return nil } func (u AuditEventDetailsUnion) MarshalJSON() ([]byte, error) { @@ -1763,6 +1817,9 @@ func (u AuditEventDetailsUnion) MarshalJSON() ([]byte, error) { if u.AuditDetailsVideoCallRecording != nil { return json.Marshal(u.AuditDetailsVideoCallRecording) } + if len(u.Raw) > 0 { + return u.Raw, nil + } return nil, fmt.Errorf("empty AuditEventDetailsUnion") } diff --git a/sdk/kotlin/examples/webhook_history.kt b/sdk/kotlin/examples/webhook_history.kt index b831f4004..d478a4cde 100644 --- a/sdk/kotlin/examples/webhook_history.kt +++ b/sdk/kotlin/examples/webhook_history.kt @@ -34,4 +34,5 @@ private fun summarizePayload(payload: WebhookPayloadUnion): String = when (paylo is ViewSubmitWebhookPayload -> "view user_id=${payload.userId} fields=${payload.data.size}" is ChatMemberWebhookPayload -> "chat_member event=${payload.event} chat_id=${payload.chatId} users=${payload.userIds.size}" is CompanyMemberWebhookPayload -> "company_member event=${payload.event} users=${payload.userIds.size}" + is VideoCallWebhookPayload -> "video_call event=${payload.event} chat_id=${payload.chatId} room_id=${payload.videoRoomId}" } diff --git a/sdk/kotlin/generated/src/main/kotlin/com/pachca/Client.kt b/sdk/kotlin/generated/src/main/kotlin/com/pachca/Client.kt index a3f305ba7..851591b55 100644 --- a/sdk/kotlin/generated/src/main/kotlin/com/pachca/Client.kt +++ b/sdk/kotlin/generated/src/main/kotlin/com/pachca/Client.kt @@ -1362,7 +1362,7 @@ interface ProfileService { throw NotImplementedError("Profile.getProfile is not implemented") } - suspend fun getStatus(): Any { + suspend fun getStatus(): UserStatus { throw NotImplementedError("Profile.getStatus is not implemented") } @@ -1400,10 +1400,10 @@ class ProfileServiceImpl internal constructor( } } - override suspend fun getStatus(): Any { + override suspend fun getStatus(): UserStatus { val response = client.get("$baseUrl/profile/status") return when (response.status.value) { - 200 -> response.body() + 200 -> response.body().data 401 -> throw response.body() else -> throw response.body() } @@ -1849,7 +1849,7 @@ interface UsersService { throw NotImplementedError("Users.getUser is not implemented") } - suspend fun getUserStatus(userId: Int): Any { + suspend fun getUserStatus(userId: Int): UserStatus { throw NotImplementedError("Users.getUserStatus is not implemented") } @@ -1926,10 +1926,10 @@ class UsersServiceImpl internal constructor( } } - override suspend fun getUserStatus(userId: Int): Any { + override suspend fun getUserStatus(userId: Int): UserStatus { val response = client.get("$baseUrl/users/$userId/status") return when (response.status.value) { - 200 -> response.body() + 200 -> response.body().data 401 -> throw response.body() else -> throw response.body() } diff --git a/sdk/kotlin/generated/src/main/kotlin/com/pachca/Models.kt b/sdk/kotlin/generated/src/main/kotlin/com/pachca/Models.kt index 9cb6a65f6..061b5810b 100644 --- a/sdk/kotlin/generated/src/main/kotlin/com/pachca/Models.kt +++ b/sdk/kotlin/generated/src/main/kotlin/com/pachca/Models.kt @@ -11,7 +11,9 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.buildClassSerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonDecoder +import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonEncoder import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.decodeFromJsonElement @@ -655,104 +657,154 @@ enum class WebhookEventType(val value: String) { @SerialName("delete") DELETE("delete"), } -@Serializable -sealed interface AuditEventDetailsUnion { - val type: String +@Serializable(with = AuditEventDetailsUnionSerializer::class) +sealed interface AuditEventDetailsUnion + +// AuditEventDetailsUnion carries no discriminator field: the member is chosen by which one +// best matches the payload keys (most recognised, then fewest unrecognised, +// then fewest declared). +object AuditEventDetailsUnionSerializer : KSerializer { + override val descriptor = buildClassSerialDescriptor("AuditEventDetailsUnion") + + private val shapes: List, (Json, JsonElement) -> AuditEventDetailsUnion>> = listOf( + setOf() to { json, element -> json.decodeFromJsonElement(AuditDetailsEmpty.serializer(), element) }, + setOf("changed_attrs") to { json, element -> json.decodeFromJsonElement(AuditDetailsUserUpdated.serializer(), element) }, + setOf("new_company_role", "previous_company_role", "initiator_id") to { json, element -> json.decodeFromJsonElement(AuditDetailsRoleChanged.serializer(), element) }, + setOf("name") to { json, element -> json.decodeFromJsonElement(AuditDetailsTagName.serializer(), element) }, + setOf("initiator_id") to { json, element -> json.decodeFromJsonElement(AuditDetailsInitiator.serializer(), element) }, + setOf("inviter_id") to { json, element -> json.decodeFromJsonElement(AuditDetailsInviter.serializer(), element) }, + setOf("old_name", "new_name") to { json, element -> json.decodeFromJsonElement(AuditDetailsChatRenamed.serializer(), element) }, + setOf("public_access") to { json, element -> json.decodeFromJsonElement(AuditDetailsChatPermission.serializer(), element) }, + setOf("chat_id", "tag_name") to { json, element -> json.decodeFromJsonElement(AuditDetailsTagChat.serializer(), element) }, + setOf("chat_id") to { json, element -> json.decodeFromJsonElement(AuditDetailsChatId.serializer(), element) }, + setOf("scopes") to { json, element -> json.decodeFromJsonElement(AuditDetailsTokenScopes.serializer(), element) }, + setOf("chat_id", "message_id", "reason") to { json, element -> json.decodeFromJsonElement(AuditDetailsKms.serializer(), element) }, + setOf("dlp_rule_id", "dlp_rule_name", "message_id", "chat_id", "user_id", "action_message", "conditions_matched") to { json, element -> json.decodeFromJsonElement(AuditDetailsDlp.serializer(), element) }, + setOf("search_type", "query_present", "cursor_present", "limit", "filters") to { json, element -> json.decodeFromJsonElement(AuditDetailsSearch.serializer(), element) }, + setOf("added_scopes", "removed_scopes") to { json, element -> json.decodeFromJsonElement(AuditDetailsBotScopes.serializer(), element) }, + setOf("changes") to { json, element -> json.decodeFromJsonElement(AuditDetailsBotWebhookSettings.serializer(), element) }, + setOf("chat_id", "duration", "max_members_count") to { json, element -> json.decodeFromJsonElement(AuditDetailsVideoCall.serializer(), element) }, + setOf("chat_id", "duration", "size") to { json, element -> json.decodeFromJsonElement(AuditDetailsVideoCallRecording.serializer(), element) }, + ) + + override fun serialize(encoder: Encoder, value: AuditEventDetailsUnion) { + val jsonEncoder = encoder as? JsonEncoder ?: error("AuditEventDetailsUnionSerializer only supports JSON") + when (value) { + is AuditDetailsEmpty -> jsonEncoder.encodeSerializableValue(AuditDetailsEmpty.serializer(), value) + is AuditDetailsUserUpdated -> jsonEncoder.encodeSerializableValue(AuditDetailsUserUpdated.serializer(), value) + is AuditDetailsRoleChanged -> jsonEncoder.encodeSerializableValue(AuditDetailsRoleChanged.serializer(), value) + is AuditDetailsTagName -> jsonEncoder.encodeSerializableValue(AuditDetailsTagName.serializer(), value) + is AuditDetailsInitiator -> jsonEncoder.encodeSerializableValue(AuditDetailsInitiator.serializer(), value) + is AuditDetailsInviter -> jsonEncoder.encodeSerializableValue(AuditDetailsInviter.serializer(), value) + is AuditDetailsChatRenamed -> jsonEncoder.encodeSerializableValue(AuditDetailsChatRenamed.serializer(), value) + is AuditDetailsChatPermission -> jsonEncoder.encodeSerializableValue(AuditDetailsChatPermission.serializer(), value) + is AuditDetailsTagChat -> jsonEncoder.encodeSerializableValue(AuditDetailsTagChat.serializer(), value) + is AuditDetailsChatId -> jsonEncoder.encodeSerializableValue(AuditDetailsChatId.serializer(), value) + is AuditDetailsTokenScopes -> jsonEncoder.encodeSerializableValue(AuditDetailsTokenScopes.serializer(), value) + is AuditDetailsKms -> jsonEncoder.encodeSerializableValue(AuditDetailsKms.serializer(), value) + is AuditDetailsDlp -> jsonEncoder.encodeSerializableValue(AuditDetailsDlp.serializer(), value) + is AuditDetailsSearch -> jsonEncoder.encodeSerializableValue(AuditDetailsSearch.serializer(), value) + is AuditDetailsBotScopes -> jsonEncoder.encodeSerializableValue(AuditDetailsBotScopes.serializer(), value) + is AuditDetailsBotWebhookSettings -> jsonEncoder.encodeSerializableValue(AuditDetailsBotWebhookSettings.serializer(), value) + is AuditDetailsVideoCall -> jsonEncoder.encodeSerializableValue(AuditDetailsVideoCall.serializer(), value) + is AuditDetailsVideoCallRecording -> jsonEncoder.encodeSerializableValue(AuditDetailsVideoCallRecording.serializer(), value) + } + } + + override fun deserialize(decoder: Decoder): AuditEventDetailsUnion { + val jsonDecoder = decoder as? JsonDecoder ?: error("AuditEventDetailsUnionSerializer only supports JSON") + val element = jsonDecoder.decodeJsonElement() + val keys = element.jsonObject.keys + var best: Pair, (Json, JsonElement) -> AuditEventDetailsUnion>? = null + var bestMatched = 0 + var bestUnknown = 0 + var bestDeclared = 0 + for (shape in shapes) { + val matched = keys.count { it in shape.first } + val unknown = keys.size - matched + val declared = shape.first.size + val better = best == null || + matched > bestMatched || + (matched == bestMatched && unknown < bestUnknown) || + (matched == bestMatched && unknown == bestUnknown && declared < bestDeclared) + if (better) { + best = shape + bestMatched = matched + bestUnknown = unknown + bestDeclared = declared + } + } + val chosen = best ?: error("No AuditEventDetailsUnion member matched the payload") + return chosen.second(jsonDecoder.json, element) + } } @Serializable -@SerialName("") -data class AuditDetailsEmpty( - override val type: String = "", -) : AuditEventDetailsUnion +class AuditDetailsEmpty : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsUserUpdated( - override val type: String = "", @SerialName("changed_attrs") val changedAttrs: List, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsRoleChanged( - override val type: String = "", @SerialName("new_company_role") val newCompanyRole: String, @SerialName("previous_company_role") val previousCompanyRole: String, @SerialName("initiator_id") val initiatorId: Int, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsTagName( - override val type: String = "", val name: String, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsInitiator( - override val type: String = "", @SerialName("initiator_id") val initiatorId: Int, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsInviter( - override val type: String = "", @SerialName("inviter_id") val inviterId: Int, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsChatRenamed( - override val type: String = "", @SerialName("old_name") val oldName: String, @SerialName("new_name") val newName: String, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsChatPermission( - override val type: String = "", @SerialName("public_access") val publicAccess: Boolean, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsTagChat( - override val type: String = "", @SerialName("chat_id") val chatId: Int, @SerialName("tag_name") val tagName: String, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsChatId( - override val type: String = "", @SerialName("chat_id") val chatId: Int, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsTokenScopes( - override val type: String = "", val scopes: List, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsKms( - override val type: String = "", @SerialName("chat_id") val chatId: Int, @SerialName("message_id") val messageId: Int, val reason: String, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsDlp( - override val type: String = "", @SerialName("dlp_rule_id") val dlpRuleId: Int, @SerialName("dlp_rule_name") val dlpRuleName: String, @SerialName("message_id") val messageId: Int, @@ -763,44 +815,34 @@ data class AuditDetailsDlp( ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsSearch( - override val type: String = "", @SerialName("search_type") val searchType: String, @SerialName("query_present") val queryPresent: Boolean, @SerialName("cursor_present") val cursorPresent: Boolean, val limit: Int, - val filters: Map, + val filters: Map, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsBotScopes( - override val type: String = "", @SerialName("added_scopes") val addedScopes: List, @SerialName("removed_scopes") val removedScopes: List, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsBotWebhookSettings( - override val type: String = "", - val changes: Map, + val changes: Map, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsVideoCall( - override val type: String = "", @SerialName("chat_id") val chatId: Int, val duration: Int, @SerialName("max_members_count") val maxMembersCount: Int, ) : AuditEventDetailsUnion @Serializable -@SerialName("") data class AuditDetailsVideoCallRecording( - override val type: String = "", @SerialName("chat_id") val chatId: Int, val duration: Int, val size: Long, @@ -1015,7 +1057,7 @@ data class ViewSubmitWebhookPayload( @SerialName("private_metadata") val privateMetadata: String, @SerialName("chat_id") val chatId: Int, @SerialName("user_id") val userId: Int, - val data: Map, + val data: Map, @SerialName("webhook_timestamp") val webhookTimestamp: Int, ) : WebhookPayloadUnion { val event: String = "submit" @@ -1120,7 +1162,7 @@ data class ApiErrorItem( val value: String? = null, val message: String, val code: ValidationErrorCode, - val payload: Map? = null, + val payload: Map? = null, ) @Serializable @@ -1286,7 +1328,7 @@ data class CustomProperty( val id: Int, val name: String, @SerialName("data_type") val dataType: CustomPropertyDataType, - val value: String, + val value: String? = null, ) @Serializable @@ -1507,7 +1549,7 @@ data class Reaction( @SerialName("user_id") val userId: Int, @Serializable(with = OffsetDateTimeSerializer::class) @SerialName("created_at") val createdAt: OffsetDateTime, val code: String, - val name: String? = null, + val name: String, ) @Serializable @@ -1634,7 +1676,7 @@ data class UploadParams( @Serializable data class User( val id: Int, - @SerialName("first_name") val firstName: String, + @SerialName("first_name") val firstName: String? = null, @SerialName("last_name") val lastName: String? = null, val nickname: String, val email: String? = null, @@ -1929,10 +1971,10 @@ data class AccessTokenInfoDataWrapper(val data: AccessTokenInfo) data class UserDataWrapper(val data: User) @Serializable -data class AvatarDataDataWrapper(val data: AvatarData) +data class UserStatusDataWrapper(val data: UserStatus) @Serializable -data class UserStatusDataWrapper(val data: UserStatus) +data class AvatarDataDataWrapper(val data: AvatarData) @Serializable data class TaskDataWrapper(val data: Task) diff --git a/sdk/kotlin/generated/src/main/kotlin/com/pachca/examples.json b/sdk/kotlin/generated/src/main/kotlin/com/pachca/examples.json index 795820ccc..afb20244b 100644 --- a/sdk/kotlin/generated/src/main/kotlin/com/pachca/examples.json +++ b/sdk/kotlin/generated/src/main/kotlin/com/pachca/examples.json @@ -6,7 +6,7 @@ ] }, "SecurityOperations_getAuditEvents": { - "usage": "val startTime = OffsetDateTime.parse(\"2025-05-01T09:11:00Z\")\nval endTime = OffsetDateTime.parse(\"2025-05-02T09:11:00Z\")\nval response = client.security.getAuditEvents(startTime = startTime, endTime = endTime, eventKey = AuditEventKey.USER_LOGIN, actorId = \"98765\", actorType = \"User\", entityId = \"98765\", entityType = \"User\", limit = 1, cursor = \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\")", + "usage": "val startTime = OffsetDateTime.parse(\"2025-05-01T09:11:00.000Z\")\nval endTime = OffsetDateTime.parse(\"2025-05-02T09:11:00.000Z\")\nval response = client.security.getAuditEvents(startTime = startTime, endTime = endTime, eventKey = AuditEventKey.USER_LOGIN, actorId = \"98765\", actorType = \"User\", entityId = \"98765\", entityType = \"User\", limit = 1, cursor = \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\")", "output": "GetAuditEventsResponse(data: List, meta: PaginationMeta)", "imports": [ "AuditEventKey" @@ -267,7 +267,7 @@ }, "ReactionOperations_addReaction": { "usage": "val request = ReactionRequest(code = \"👍\", name = \":+1:\")\nval response = client.reactions.addReaction(id = 7231942, request = request)", - "output": "Reaction(userId: Int, createdAt: OffsetDateTime, code: String, name: String?)", + "output": "Reaction(userId: Int, createdAt: OffsetDateTime, code: String, name: String)", "imports": [ "ReactionRequest" ] @@ -301,11 +301,11 @@ }, "ProfileOperations_getProfile": { "usage": "val response = client.profile.getProfile()", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)" + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)" }, "ProfileOperations_getStatus": { "usage": "val response = client.profile.getStatus()", - "output": "Any" + "output": "UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)" }, "ProfileAvatarOperations_updateProfileAvatar": { "usage": "val image = ByteArray(0)\nval response = client.profile.updateProfileAvatar(image = image)", @@ -356,11 +356,11 @@ }, "TaskOperations_getTask": { "usage": "val response = client.tasks.getTask(id = 22283)", - "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List)" + "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List)" }, "TaskOperations_createTask": { "usage": "val request = TaskCreateRequest(\n task = TaskCreateRequestTask(\n kind = TaskKind.REMINDER,\n content = \"Забрать со склада 21 заказ\",\n dueAt = OffsetDateTime.parse(\"2020-06-05T12:00:00.000+03:00\"),\n priority = 2,\n performerIds = listOf(123),\n chatId = 456,\n allDay = false,\n customProperties = listOf(TaskCreateRequestCustomProperty(id = 78, value = \"Синий склад\"))\n )\n)\nval response = client.tasks.createTask(request = request)", - "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List)", + "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List)", "imports": [ "TaskCreateRequest", "TaskCreateRequestCustomProperty", @@ -370,7 +370,7 @@ }, "TaskOperations_updateTask": { "usage": "val request = TaskUpdateRequest(\n task = TaskUpdateRequestTask(\n kind = TaskKind.REMINDER,\n content = \"Забрать со склада 21 заказ\",\n dueAt = OffsetDateTime.parse(\"2020-06-05T12:00:00.000+03:00\"),\n priority = 2,\n performerIds = listOf(123),\n status = TaskStatus.DONE,\n allDay = false,\n doneAt = OffsetDateTime.parse(\"2020-06-05T12:00:00.000Z\"),\n customProperties = listOf(TaskUpdateRequestCustomProperty(id = 78, value = \"Синий склад\"))\n )\n)\nval response = client.tasks.updateTask(id = 22283, request = request)", - "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List)", + "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: OffsetDateTime?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: OffsetDateTime, performerIds: List, allDay: Boolean, customProperties: List)", "imports": [ "TaskKind", "TaskStatus", @@ -388,15 +388,15 @@ }, "UserOperations_getUser": { "usage": "val response = client.users.getUser(id = 12)", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)" + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)" }, "UserStatusOperations_getUserStatus": { "usage": "val response = client.users.getUserStatus(userId = 12)", - "output": "Any" + "output": "UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)" }, "UserOperations_createUser": { "usage": "val request = UserCreateRequest(\n user = UserCreateRequestUser(\n firstName = \"Олег\",\n lastName = \"Петров\",\n email = \"olegp@example.com\",\n phoneNumber = \"+79001234567\",\n nickname = \"olegpetrov\",\n department = \"Продукт\",\n title = \"CIO\",\n role = UserCreateRole.USER,\n suspended = false,\n listTags = listOf(\"example\"),\n chatIds = listOf(123),\n customProperties = listOf(UserCreateRequestCustomProperty(id = 1678, value = \"Санкт-Петербург\"))\n ),\n skipEmailNotify = false\n)\nval response = client.users.createUser(request = request)", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)", + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)", "imports": [ "UserCreateRequest", "UserCreateRequestCustomProperty", @@ -406,7 +406,7 @@ }, "UserOperations_updateUser": { "usage": "val request = UserUpdateRequest(\n user = UserUpdateRequestUser(\n firstName = \"Олег\",\n lastName = \"Петров\",\n email = \"olegpetrov@example.com\",\n phoneNumber = \"+79001234567\",\n nickname = \"olegpetrov\",\n department = \"Отдел разработки\",\n title = \"Старший разработчик\",\n role = UserRoleInput.USER,\n suspended = false,\n listTags = listOf(\"example\"),\n customProperties = listOf(UserUpdateRequestCustomProperty(id = 1678, value = \"Санкт-Петербург\"))\n )\n)\nval response = client.users.updateUser(id = 12, request = request)", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)", + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Boolean, inviteStatus: InviteStatus, inviterId: Int?, listTags: List, customProperties: List, userStatus: UserStatus(emoji: String, title: String, expiresAt: OffsetDateTime?, isAway: Boolean, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Boolean, sso: Boolean, createdAt: OffsetDateTime, lastActivityAt: OffsetDateTime?, timeZone: String?, imageUrl: String?)", "imports": [ "UserRoleInput", "UserUpdateRequest", @@ -436,7 +436,7 @@ "usage": "client.users.deleteUserStatus(userId = 12)" }, "FormOperations_openView": { - "usage": "val request = OpenViewRequest(\n type = \"modal\",\n triggerId = \"791a056b-006c-49dd-834b-c633fde52fe8\",\n privateMetadata = \"{\\\"timeoff_id\\\":4378}\",\n callbackId = \"timeoff_reguest_form\",\n view = OpenViewRequestView(\n title = \"Уведомление об отпуске\",\n closeText = \"Закрыть\",\n submitText = \"Отправить заявку\",\n blocks = listOf(ViewBlockHeader(type = \"header\", text = \"Основная информация\"))\n )\n)\nclient.views.openView(request = request)", + "usage": "val request = OpenViewRequest(\n type = \"modal\",\n triggerId = \"791a056b-006c-49dd-834b-c633fde52fe8\",\n privateMetadata = \"{\\\"timeoff_id\\\":4378}\",\n callbackId = \"timeoff_request_form\",\n view = OpenViewRequestView(\n title = \"Уведомление об отпуске\",\n closeText = \"Закрыть\",\n submitText = \"Отправить заявку\",\n blocks = listOf(ViewBlockHeader(type = \"header\", text = \"Основная информация\"))\n )\n)\nclient.views.openView(request = request)", "imports": [ "OpenViewRequest", "OpenViewRequestView", diff --git a/sdk/python/examples/httpclient.py b/sdk/python/examples/httpclient.py index bbd4b606f..63b0710db 100644 --- a/sdk/python/examples/httpclient.py +++ b/sdk/python/examples/httpclient.py @@ -35,4 +35,5 @@ async def main(): await client.close() -asyncio.run(main()) +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/python/examples/main.py b/sdk/python/examples/main.py index bc1949fe1..a4f015efc 100644 --- a/sdk/python/examples/main.py +++ b/sdk/python/examples/main.py @@ -20,11 +20,10 @@ ReactionRequest, ) -token = os.environ["PACHCA_TOKEN"] -chat_id = int(os.environ["PACHCA_CHAT_ID"]) - - async def main(): + token = os.environ["PACHCA_TOKEN"] + chat_id = int(os.environ["PACHCA_CHAT_ID"]) + client = PachcaClient(token) # 0. Get chat (verifies datetime deserialization) @@ -86,4 +85,5 @@ async def main(): print("\nAll 8 steps completed!") -asyncio.run(main()) +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/python/examples/polling.py b/sdk/python/examples/polling.py index 56b802460..6086ffe0a 100644 --- a/sdk/python/examples/polling.py +++ b/sdk/python/examples/polling.py @@ -51,4 +51,5 @@ async def main(): await client.close() -asyncio.run(main()) +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/python/examples/stub.py b/sdk/python/examples/stub.py index 55fbe50d1..058dd7a25 100644 --- a/sdk/python/examples/stub.py +++ b/sdk/python/examples/stub.py @@ -41,4 +41,5 @@ async def main(): print(f'Got: "{msg.content}" (id={msg.id})') -asyncio.run(main()) +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/python/examples/upload.py b/sdk/python/examples/upload.py index 5dc0ff904..263eb99e3 100644 --- a/sdk/python/examples/upload.py +++ b/sdk/python/examples/upload.py @@ -21,14 +21,12 @@ MessageCreateRequestFile, ) -token = os.environ["PACHCA_TOKEN"] -chat_id = int(os.environ["PACHCA_CHAT_ID"]) -file_path = os.environ["PACHCA_FILE_PATH"] - -filename = os.path.basename(file_path) - - async def main(): + token = os.environ["PACHCA_TOKEN"] + chat_id = int(os.environ["PACHCA_CHAT_ID"]) + file_path = os.environ["PACHCA_FILE_PATH"] + filename = os.path.basename(file_path) + client = PachcaClient(token) # 1. Read file @@ -85,4 +83,5 @@ async def main(): print("\nDone! File uploaded and sent.") -asyncio.run(main()) +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/python/examples/webhook_history.py b/sdk/python/examples/webhook_history.py index a61555f10..49bc1bc0f 100644 --- a/sdk/python/examples/webhook_history.py +++ b/sdk/python/examples/webhook_history.py @@ -20,6 +20,7 @@ LinkSharedWebhookPayload, MessageWebhookPayload, ReactionWebhookPayload, + VideoCallWebhookPayload, ViewSubmitWebhookPayload, WebhookPayloadUnion, ) @@ -41,6 +42,8 @@ def summarize_payload(payload: WebhookPayloadUnion) -> str: return f"chat_member event={payload.event} chat_id={payload.chat_id} users={len(payload.user_ids)}" case CompanyMemberWebhookPayload(): return f"company_member event={payload.event} users={len(payload.user_ids)}" + case VideoCallWebhookPayload(): + return f"video_call event={payload.event} chat_id={payload.chat_id} room_id={payload.video_room_id}" case _: return f"unknown type={type(payload).__name__}" @@ -64,4 +67,5 @@ async def main(): await client.close() -asyncio.run(main()) +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/python/generated/pachca/client.py b/sdk/python/generated/pachca/client.py index 556c7e441..235f2401e 100644 --- a/sdk/python/generated/pachca/client.py +++ b/sdk/python/generated/pachca/client.py @@ -68,9 +68,9 @@ ListThreadsResponse, Thread, AccessTokenInfo, + UserStatus, AvatarData, StatusUpdateRequest, - UserStatus, SearchChatsParams, SearchChatsResponse, ChatSubtype, @@ -1804,7 +1804,7 @@ async def get_profile( raise NotImplementedError("Profile.getProfile is not implemented") async def get_status( - self) -> object: + self) -> UserStatus: raise NotImplementedError("Profile.getStatus is not implemented") async def update_profile_avatar( @@ -1851,14 +1851,14 @@ async def get_profile( raise deserialize(ApiError, body) async def get_status( - self) -> object: + self) -> UserStatus: response = await self._client.get( "/profile/status", ) body = response.json() match response.status_code: case 200: - return deserialize(object, body) + return deserialize(UserStatus, body["data"]) case 401: raise deserialize(OAuthError, body) case _: @@ -2320,7 +2320,7 @@ async def get_user( async def get_user_status( self, user_id: int, - ) -> object: + ) -> UserStatus: raise NotImplementedError("Users.getUserStatus is not implemented") async def create_user( @@ -2436,14 +2436,14 @@ async def get_user( async def get_user_status( self, user_id: int, - ) -> object: + ) -> UserStatus: response = await self._client.get( f"/users/{user_id}/status", ) body = response.json() match response.status_code: case 200: - return deserialize(object, body) + return deserialize(UserStatus, body["data"]) case 401: raise deserialize(OAuthError, body) case _: diff --git a/sdk/python/generated/pachca/examples.json b/sdk/python/generated/pachca/examples.json index 32172e571..7ce387854 100644 --- a/sdk/python/generated/pachca/examples.json +++ b/sdk/python/generated/pachca/examples.json @@ -6,7 +6,7 @@ ] }, "SecurityOperations_getAuditEvents": { - "usage": "params = GetAuditEventsParams(\n start_time=datetime.fromisoformat(\"2025-05-01T09:11:00Z\"),\n end_time=datetime.fromisoformat(\"2025-05-02T09:11:00Z\"),\n event_key=AuditEventKey.USER_LOGIN,\n actor_id=\"98765\",\n actor_type=\"User\",\n entity_id=\"98765\",\n entity_type=\"User\",\n limit=1,\n cursor=\"eyJpZCI6MTAsImRpciI6ImFzYyJ9\"\n)\nresponse = await client.security.get_audit_events(params=params)", + "usage": "params = GetAuditEventsParams(\n start_time=datetime.fromisoformat(\"2025-05-01T09:11:00.000Z\"),\n end_time=datetime.fromisoformat(\"2025-05-02T09:11:00.000Z\"),\n event_key=AuditEventKey.USER_LOGIN,\n actor_id=\"98765\",\n actor_type=\"User\",\n entity_id=\"98765\",\n entity_type=\"User\",\n limit=1,\n cursor=\"eyJpZCI6MTAsImRpciI6ImFzYyJ9\"\n)\nresponse = await client.security.get_audit_events(params=params)", "output": "GetAuditEventsResponse(data: list[AuditEvent], meta: PaginationMeta)", "imports": [ "AuditEventKey", @@ -280,7 +280,7 @@ }, "ReactionOperations_addReaction": { "usage": "request = ReactionRequest(code=\"👍\", name=\":+1:\")\nresponse = await client.reactions.add_reaction(id=7231942, request=request)", - "output": "Reaction(user_id: int, created_at: datetime, code: str, name: str | None)", + "output": "Reaction(user_id: int, created_at: datetime, code: str, name: str)", "imports": [ "ReactionRequest" ] @@ -323,11 +323,11 @@ }, "ProfileOperations_getProfile": { "usage": "response = await client.profile.get_profile()", - "output": "User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)" + "output": "User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)" }, "ProfileOperations_getStatus": { "usage": "response = await client.profile.get_status()", - "output": "object" + "output": "UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None)" }, "ProfileAvatarOperations_updateProfileAvatar": { "usage": "response = await client.profile.update_profile_avatar(image=b\"\")", @@ -384,11 +384,11 @@ }, "TaskOperations_getTask": { "usage": "response = await client.tasks.get_task(id=22283)", - "output": "Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)])" + "output": "Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)])" }, "TaskOperations_createTask": { "usage": "request = TaskCreateRequest(\n task=TaskCreateRequestTask(\n kind=TaskKind.REMINDER,\n content=\"Забрать со склада 21 заказ\",\n due_at=datetime.fromisoformat(\"2020-06-05T12:00:00.000+03:00\"),\n priority=2,\n performer_ids=[123],\n chat_id=456,\n all_day=False,\n custom_properties=[TaskCreateRequestCustomProperty(id=78, value=\"Синий склад\")]\n )\n)\nresponse = await client.tasks.create_task(request=request)", - "output": "Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)])", + "output": "Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)])", "imports": [ "TaskCreateRequest", "TaskCreateRequestCustomProperty", @@ -398,7 +398,7 @@ }, "TaskOperations_updateTask": { "usage": "request = TaskUpdateRequest(\n task=TaskUpdateRequestTask(\n kind=TaskKind.REMINDER,\n content=\"Забрать со склада 21 заказ\",\n due_at=datetime.fromisoformat(\"2020-06-05T12:00:00.000+03:00\"),\n priority=2,\n performer_ids=[123],\n status=TaskStatus.DONE,\n all_day=False,\n done_at=datetime.fromisoformat(\"2020-06-05T12:00:00.000Z\"),\n custom_properties=[TaskUpdateRequestCustomProperty(id=78, value=\"Синий склад\")]\n )\n)\nresponse = await client.tasks.update_task(id=22283, request=request)", - "output": "Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)])", + "output": "Task(id: int, kind: TaskKind, content: str, due_at: datetime | None, priority: int, user_id: int, chat_id: int | None, status: TaskStatus, created_at: datetime, performer_ids: list[int], all_day: bool, custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)])", "imports": [ "TaskKind", "TaskStatus", @@ -419,15 +419,15 @@ }, "UserOperations_getUser": { "usage": "response = await client.users.get_user(id=12)", - "output": "User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)" + "output": "User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)" }, "UserStatusOperations_getUserStatus": { "usage": "response = await client.users.get_user_status(user_id=12)", - "output": "object" + "output": "UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None)" }, "UserOperations_createUser": { "usage": "request = UserCreateRequest(\n user=UserCreateRequestUser(\n first_name=\"Олег\",\n last_name=\"Петров\",\n email=\"olegp@example.com\",\n phone_number=\"+79001234567\",\n nickname=\"olegpetrov\",\n department=\"Продукт\",\n title=\"CIO\",\n role=UserCreateRole.USER,\n suspended=False,\n list_tags=[\"example\"],\n chat_ids=[123],\n custom_properties=[UserCreateRequestCustomProperty(id=1678, value=\"Санкт-Петербург\")]\n ),\n skip_email_notify=False\n)\nresponse = await client.users.create_user(request=request)", - "output": "User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)", + "output": "User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)", "imports": [ "UserCreateRequest", "UserCreateRequestCustomProperty", @@ -437,7 +437,7 @@ }, "UserOperations_updateUser": { "usage": "request = UserUpdateRequest(\n user=UserUpdateRequestUser(\n first_name=\"Олег\",\n last_name=\"Петров\",\n email=\"olegpetrov@example.com\",\n phone_number=\"+79001234567\",\n nickname=\"olegpetrov\",\n department=\"Отдел разработки\",\n title=\"Старший разработчик\",\n role=UserRoleInput.USER,\n suspended=False,\n list_tags=[\"example\"],\n custom_properties=[UserUpdateRequestCustomProperty(id=1678, value=\"Санкт-Петербург\")]\n )\n)\nresponse = await client.users.update_user(id=12, request=request)", - "output": "User(id: int, first_name: str, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)", + "output": "User(id: int, first_name: str | None, last_name: str | None, nickname: str, email: str | None, phone_number: str | None, department: str | None, title: str | None, role: UserRole, suspended: bool, invite_status: InviteStatus, inviter_id: int | None, list_tags: list[str], custom_properties: list[CustomProperty(id: int, name: str, data_type: CustomPropertyDataType, value: str | None)], user_status: UserStatus(emoji: str, title: str, expires_at: datetime | None, is_away: bool, away_message: UserStatusAwayMessage(text: str) | None) | None, bot: bool, sso: bool, created_at: datetime, last_activity_at: datetime | None, time_zone: str | None, image_url: str | None)", "imports": [ "UserRoleInput", "UserUpdateRequest", @@ -467,7 +467,7 @@ "usage": "await client.users.delete_user_status(user_id=12)" }, "FormOperations_openView": { - "usage": "request = OpenViewRequest(\n type=\"modal\",\n trigger_id=\"791a056b-006c-49dd-834b-c633fde52fe8\",\n private_metadata=\"{\\\"timeoff_id\\\":4378}\",\n callback_id=\"timeoff_reguest_form\",\n view=OpenViewRequestView(\n title=\"Уведомление об отпуске\",\n close_text=\"Закрыть\",\n submit_text=\"Отправить заявку\",\n blocks=[ViewBlockHeader(type=\"header\", text=\"Основная информация\")]\n )\n)\nawait client.views.open_view(request=request)", + "usage": "request = OpenViewRequest(\n type=\"modal\",\n trigger_id=\"791a056b-006c-49dd-834b-c633fde52fe8\",\n private_metadata=\"{\\\"timeoff_id\\\":4378}\",\n callback_id=\"timeoff_request_form\",\n view=OpenViewRequestView(\n title=\"Уведомление об отпуске\",\n close_text=\"Закрыть\",\n submit_text=\"Отправить заявку\",\n blocks=[ViewBlockHeader(type=\"header\", text=\"Основная информация\")]\n )\n)\nawait client.views.open_view(request=request)", "imports": [ "OpenViewRequest", "OpenViewRequestView", diff --git a/sdk/python/generated/pachca/models.py b/sdk/python/generated/pachca/models.py index b0462ea72..ecacaeb5e 100644 --- a/sdk/python/generated/pachca/models.py +++ b/sdk/python/generated/pachca/models.py @@ -3,7 +3,7 @@ from datetime import datetime from dataclasses import dataclass from enum import StrEnum -from typing import Union +from typing import Any, Union class AuditEventKey(StrEnum): """Тип аудит-события""" @@ -441,7 +441,7 @@ class ApiErrorItem: message: str code: ValidationErrorCode value: str | None = None - payload: dict[str, str] | None = None + payload: dict[str, Any] | None = None @dataclass @@ -452,7 +452,7 @@ class AuditDetailsBotScopes: @dataclass class AuditDetailsBotWebhookSettings: - changes: dict[str, str] + changes: dict[str, Any] @dataclass @@ -517,7 +517,7 @@ class AuditDetailsSearch: query_present: bool cursor_present: bool limit: int - filters: dict[str, str] + filters: dict[str, Any] @dataclass @@ -750,7 +750,7 @@ class CustomProperty: id: int name: str data_type: CustomPropertyDataType - value: str + value: str | None = None @dataclass @@ -1000,7 +1000,7 @@ class Reaction: user_id: int created_at: datetime code: str - name: str | None = None + name: str @dataclass @@ -1140,7 +1140,6 @@ class UploadParams: @dataclass class User: id: int - first_name: str nickname: str role: UserRole suspended: bool @@ -1150,6 +1149,7 @@ class User: bot: bool sso: bool created_at: datetime + first_name: str | None = None last_name: str | None = None email: str | None = None phone_number: str | None = None @@ -1384,7 +1384,7 @@ class ViewSubmitWebhookPayload: type: str # literal "view" event: str # literal "submit" user_id: int - data: dict[str, str] + data: dict[str, Any] webhook_timestamp: int callback_id: str | None = None private_metadata: str | None = None diff --git a/sdk/python/generated/pachca/utils.py b/sdk/python/generated/pachca/utils.py index 919a78106..8da5e540a 100644 --- a/sdk/python/generated/pachca/utils.py +++ b/sdk/python/generated/pachca/utils.py @@ -16,6 +16,18 @@ MessageWebhookPayload, ReactionWebhookPayload, VideoCallWebhookPayload, + ViewBlockCheckbox, + ViewBlockDate, + ViewBlockDivider, + ViewBlockFileInput, + ViewBlockHeader, + ViewBlockInput, + ViewBlockMarkdown, + ViewBlockPlainText, + ViewBlockRadio, + ViewBlockSelect, + ViewBlockTime, + ViewBlockUnion, ViewSubmitWebhookPayload, WebhookPayloadUnion, ) @@ -41,6 +53,35 @@ def _resolve_type(tp: object) -> type | None: return None +def _union_members(tp: object) -> list[type]: + """Dataclass members of a Union, ignoring None and non-dataclass arms.""" + if get_origin(tp) is list: + return [] + return [arg for arg in get_args(tp) if _is_dataclass_type(arg)] + + +def _declared_keys(member: type) -> set[str]: + return {f.name[:-1] if f.name.endswith("_") else f.name for f in fields(member)} + + +def _match_union_member(members: list[type], data: dict) -> type: + """Pick the union member that best fits a payload with no discriminator. + + Ranks by: most payload keys recognised, then fewest unrecognised, then + fewest declared fields (so an empty member only wins an empty payload). + """ + keys = {k.replace("-", "_").lower() for k in data} + best = members[0] + best_score: tuple[int, int, int] | None = None + for member in members: + declared = _declared_keys(member) + matched = len(keys & declared) + score = (-matched, len(keys - declared), len(declared)) + if best_score is None or score < best_score: + best, best_score = member, score + return best + + def _resolve_list_item_type(tp: object) -> object | None: """Extract the item type from list[X].""" origin = get_origin(tp) @@ -59,6 +100,18 @@ def _deserialize_instance(tp: object, value: object) -> object: if custom is not None and isinstance(value, dict): return custom(value) if isinstance(value, dict): + members = _union_members(tp) + if len(members) > 1: + # Multi-member union: pick by discriminator when the spec has one, + # otherwise by which member best matches the payload shape. Taking + # the first member (the old behaviour) silently dropped the data. + disc = _UNION_DISCRIMINATORS.get(tp) + if disc is not None: + field_name, by_value = disc + chosen = by_value.get(value.get(field_name)) + if chosen is not None: + return _deserialize_dataclass(chosen, value) + return _deserialize_dataclass(_match_union_member(members, value), value) nested = _resolve_type(tp) if nested is not None: return _deserialize_dataclass(nested, value) @@ -117,6 +170,12 @@ def _webhook_payload_union_deserialize(data: dict) -> WebhookPayloadUnion: WebhookPayloadUnion: _webhook_payload_union_deserialize, } +# Unions the spec discriminates by a literal field: {union: (field, {value: member})}. +# Unions absent here have no discriminator and are matched by payload shape. +_UNION_DISCRIMINATORS: dict[object, tuple[str, dict[str, type]]] = { + ViewBlockUnion: ("type", {"header": ViewBlockHeader, "plain_text": ViewBlockPlainText, "markdown": ViewBlockMarkdown, "divider": ViewBlockDivider, "input": ViewBlockInput, "select": ViewBlockSelect, "radio": ViewBlockRadio, "checkbox": ViewBlockCheckbox, "date": ViewBlockDate, "time": ViewBlockTime, "file_input": ViewBlockFileInput}), +} + def deserialize(cls: Type[T], data: dict) -> T: """Create a typed instance from a dict, recursively deserializing nested values.""" diff --git a/sdk/swift/examples/Sources/HttpClient/main.swift b/sdk/swift/examples/Sources/HttpClient/main.swift index ff7ebe84d..4a25f957f 100644 --- a/sdk/swift/examples/Sources/HttpClient/main.swift +++ b/sdk/swift/examples/Sources/HttpClient/main.swift @@ -1,4 +1,7 @@ import Foundation +#if canImport(FoundationNetworking) +import FoundationNetworking +#endif import PachcaSDK // HTTP client example — using pre-configured headers and URLSession with optional proxy. @@ -17,6 +20,9 @@ guard let chatIdStr = ProcessInfo.processInfo.environment["PACHCA_CHAT_ID"], } let config = URLSessionConfiguration.default +// The kCFNetworkProxies* keys come from CFNetwork and exist only on Apple +// platforms. On Linux URLSession picks the proxy up from HTTP_PROXY itself. +#if canImport(Darwin) if let proxy = ProcessInfo.processInfo.environment["HTTP_PROXY"], let proxyURL = URL(string: proxy) { config.connectionProxyDictionary = [ @@ -25,6 +31,7 @@ if let proxy = ProcessInfo.processInfo.environment["HTTP_PROXY"], kCFNetworkProxiesHTTPPort: proxyURL.port ?? 8080, ] } +#endif let session = URLSession(configuration: config) let headers = ["Authorization": "Bearer \(token)"] diff --git a/sdk/swift/examples/Sources/Upload/main.swift b/sdk/swift/examples/Sources/Upload/main.swift index 47280e16e..1daa70882 100644 --- a/sdk/swift/examples/Sources/Upload/main.swift +++ b/sdk/swift/examples/Sources/Upload/main.swift @@ -36,7 +36,7 @@ print(" Got direct_url: \(params.directUrl)") print("Step 3: Uploading file...") var uploadRequest = FileUploadRequest( - Content_Disposition: params.Content_Disposition, + ContentDisposition: params.ContentDisposition, acl: params.acl, policy: params.policy, xAmzCredential: params.xAmzCredential, diff --git a/sdk/swift/examples/Sources/WebhookHistory/main.swift b/sdk/swift/examples/Sources/WebhookHistory/main.swift index 077e8aacc..d23e9100b 100644 --- a/sdk/swift/examples/Sources/WebhookHistory/main.swift +++ b/sdk/swift/examples/Sources/WebhookHistory/main.swift @@ -36,5 +36,7 @@ func summarizePayload(_ payload: WebhookPayloadUnion) -> String { return "chat_member event=\(member.event) chat_id=\(String(describing: member.chatId)) users=\(member.userIds.count)" case .companyMemberWebhookPayload(let member): return "company_member event=\(member.event) users=\(member.userIds.count)" + case .videoCallWebhookPayload(let call): + return "video_call event=\(call.event) chat_id=\(call.chatId) room_id=\(call.videoRoomId)" } } diff --git a/sdk/swift/generated/Sources/Pachca/GeneratedSources/Client.swift b/sdk/swift/generated/Sources/Pachca/GeneratedSources/Client.swift index 1b53d783e..3fb2a03a1 100644 --- a/sdk/swift/generated/Sources/Pachca/GeneratedSources/Client.swift +++ b/sdk/swift/generated/Sources/Pachca/GeneratedSources/Client.swift @@ -1649,7 +1649,7 @@ open class ProfileService { throw pachcaNotImplemented("Profile.getProfile") } - open func getStatus() async throws -> String { + open func getStatus() async throws -> UserStatus { throw pachcaNotImplemented("Profile.getStatus") } @@ -1701,14 +1701,14 @@ public final class ProfileServiceImpl: ProfileService { } } - public override func getStatus() async throws -> String { + public override func getStatus() async throws -> UserStatus { var request = URLRequest(url: URL(string: "\(baseURL)/profile/status")!) headers.forEach { request.setValue($1, forHTTPHeaderField: $0) } let (data, urlResponse) = try await dataWithRetry(session: session, for: request) let statusCode = (urlResponse as! HTTPURLResponse).statusCode switch statusCode { case 200: - return try deserialize(String.self, from: data) + return try deserialize(UserStatusDataWrapper.self, from: data).data case 401: throw try deserialize(OAuthError.self, from: data) default: @@ -2128,7 +2128,7 @@ open class UsersService { throw pachcaNotImplemented("Users.getUser") } - open func getUserStatus(userId: Int) async throws -> String { + open func getUserStatus(userId: Int) async throws -> UserStatus { throw pachcaNotImplemented("Users.getUserStatus") } @@ -2223,14 +2223,14 @@ public final class UsersServiceImpl: UsersService { } } - public override func getUserStatus(userId: Int) async throws -> String { + public override func getUserStatus(userId: Int) async throws -> UserStatus { var request = URLRequest(url: URL(string: "\(baseURL)/users/\(userId)/status")!) headers.forEach { request.setValue($1, forHTTPHeaderField: $0) } let (data, urlResponse) = try await dataWithRetry(session: session, for: request) let statusCode = (urlResponse as! HTTPURLResponse).statusCode switch statusCode { case 200: - return try deserialize(String.self, from: data) + return try deserialize(UserStatusDataWrapper.self, from: data).data case 401: throw try deserialize(OAuthError.self, from: data) default: diff --git a/sdk/swift/generated/Sources/Pachca/GeneratedSources/Models.swift b/sdk/swift/generated/Sources/Pachca/GeneratedSources/Models.swift index 607f45aab..1a9fea48e 100644 --- a/sdk/swift/generated/Sources/Pachca/GeneratedSources/Models.swift +++ b/sdk/swift/generated/Sources/Pachca/GeneratedSources/Models.swift @@ -653,9 +653,9 @@ public struct ApiErrorItem: Codable { public let value: String? public let message: String public let code: ValidationErrorCode - public let payload: [String: String]? + public let payload: [String: AnyCodable]? - public init(key: String, value: String? = nil, message: String, code: ValidationErrorCode, payload: [String: String]? = nil) { + public init(key: String, value: String? = nil, message: String, code: ValidationErrorCode, payload: [String: AnyCodable]? = nil) { self.key = key self.value = value self.message = message @@ -680,9 +680,9 @@ public struct AuditDetailsBotScopes: Codable { } public struct AuditDetailsBotWebhookSettings: Codable { - public let changes: [String: String] + public let changes: [String: AnyCodable] - public init(changes: [String: String]) { + public init(changes: [String: AnyCodable]) { self.changes = changes } } @@ -824,9 +824,9 @@ public struct AuditDetailsSearch: Codable { public let queryPresent: Bool public let cursorPresent: Bool public let limit: Int - public let filters: [String: String] + public let filters: [String: AnyCodable] - public init(searchType: String, queryPresent: Bool, cursorPresent: Bool, limit: Int, filters: [String: String]) { + public init(searchType: String, queryPresent: Bool, cursorPresent: Bool, limit: Int, filters: [String: AnyCodable]) { self.searchType = searchType self.queryPresent = queryPresent self.cursorPresent = cursorPresent @@ -1405,9 +1405,9 @@ public struct CustomProperty: Codable { public let id: Int public let name: String public let dataType: CustomPropertyDataType - public let value: String + public let value: String? - public init(id: Int, name: String, dataType: CustomPropertyDataType, value: String) { + public init(id: Int, name: String, dataType: CustomPropertyDataType, value: String? = nil) { self.id = id self.name = name self.dataType = dataType @@ -2049,9 +2049,9 @@ public struct Reaction: Codable { public let userId: Int public let createdAt: String public let code: String - public let name: String? + public let name: String - public init(userId: Int, createdAt: String, code: String, name: String? = nil) { + public init(userId: Int, createdAt: String, code: String, name: String) { self.userId = userId self.createdAt = createdAt self.code = code @@ -2386,7 +2386,7 @@ public struct UploadParams: Codable { public struct User: Codable { public let id: Int - public let firstName: String + public let firstName: String? public let lastName: String? public let nickname: String public let email: String? @@ -2407,7 +2407,7 @@ public struct User: Codable { public let timeZone: String? public let imageUrl: String? - public init(id: Int, firstName: String, lastName: String? = nil, nickname: String, email: String? = nil, phoneNumber: String? = nil, department: String? = nil, title: String? = nil, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int? = nil, listTags: [String], customProperties: [CustomProperty], userStatus: UserStatus? = nil, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String? = nil, timeZone: String? = nil, imageUrl: String? = nil) { + public init(id: Int, firstName: String? = nil, lastName: String? = nil, nickname: String, email: String? = nil, phoneNumber: String? = nil, department: String? = nil, title: String? = nil, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int? = nil, listTags: [String], customProperties: [CustomProperty], userStatus: UserStatus? = nil, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String? = nil, timeZone: String? = nil, imageUrl: String? = nil) { self.id = id self.firstName = firstName self.lastName = lastName @@ -2958,10 +2958,10 @@ public struct ViewSubmitWebhookPayload: Codable { public let privateMetadata: String? public let chatId: Int? public let userId: Int - public let data: [String: String] + public let data: [String: AnyCodable] public let webhookTimestamp: Int - public init(type: String, event: String, callbackId: String? = nil, privateMetadata: String? = nil, chatId: Int? = nil, userId: Int, data: [String: String], webhookTimestamp: Int) { + public init(type: String, event: String, callbackId: String? = nil, privateMetadata: String? = nil, chatId: Int? = nil, userId: Int, data: [String: AnyCodable], webhookTimestamp: Int) { self.type = type self.event = event self.callbackId = callbackId @@ -3125,55 +3125,84 @@ public enum AuditEventDetailsUnion: Codable { case auditDetailsVideoCall(AuditDetailsVideoCall) case auditDetailsVideoCallRecording(AuditDetailsVideoCallRecording) - private enum CodingKeys: String, CodingKey { - case type - } - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let type = try container.decode(String.self, forKey: .type) - switch type { - case "auditDetailsEmpty": - self = .auditDetailsEmpty(try AuditDetailsEmpty(from: decoder)) - case "auditDetailsUserUpdated": - self = .auditDetailsUserUpdated(try AuditDetailsUserUpdated(from: decoder)) - case "auditDetailsRoleChanged": - self = .auditDetailsRoleChanged(try AuditDetailsRoleChanged(from: decoder)) - case "auditDetailsTagName": - self = .auditDetailsTagName(try AuditDetailsTagName(from: decoder)) - case "auditDetailsInitiator": - self = .auditDetailsInitiator(try AuditDetailsInitiator(from: decoder)) - case "auditDetailsInviter": - self = .auditDetailsInviter(try AuditDetailsInviter(from: decoder)) - case "auditDetailsChatRenamed": - self = .auditDetailsChatRenamed(try AuditDetailsChatRenamed(from: decoder)) - case "auditDetailsChatPermission": - self = .auditDetailsChatPermission(try AuditDetailsChatPermission(from: decoder)) - case "auditDetailsTagChat": - self = .auditDetailsTagChat(try AuditDetailsTagChat(from: decoder)) - case "auditDetailsChatId": - self = .auditDetailsChatId(try AuditDetailsChatId(from: decoder)) - case "auditDetailsTokenScopes": - self = .auditDetailsTokenScopes(try AuditDetailsTokenScopes(from: decoder)) - case "auditDetailsKms": - self = .auditDetailsKms(try AuditDetailsKms(from: decoder)) - case "auditDetailsDlp": - self = .auditDetailsDlp(try AuditDetailsDlp(from: decoder)) - case "auditDetailsSearch": - self = .auditDetailsSearch(try AuditDetailsSearch(from: decoder)) - case "auditDetailsBotScopes": - self = .auditDetailsBotScopes(try AuditDetailsBotScopes(from: decoder)) - case "auditDetailsBotWebhookSettings": - self = .auditDetailsBotWebhookSettings(try AuditDetailsBotWebhookSettings(from: decoder)) - case "auditDetailsVideoCall": - self = .auditDetailsVideoCall(try AuditDetailsVideoCall(from: decoder)) - case "auditDetailsVideoCallRecording": - self = .auditDetailsVideoCallRecording(try AuditDetailsVideoCallRecording(from: decoder)) - default: - throw DecodingError.dataCorrupted( - DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Unknown type: \(type)") - ) + // AuditEventDetailsUnion carries no discriminator field: members are tried from most + // to least demanding, so the loosest one only wins when nothing else fits. + if let value = try? AuditDetailsDlp(from: decoder) { + self = .auditDetailsDlp(value) + return + } + if let value = try? AuditDetailsSearch(from: decoder) { + self = .auditDetailsSearch(value) + return + } + if let value = try? AuditDetailsKms(from: decoder) { + self = .auditDetailsKms(value) + return + } + if let value = try? AuditDetailsRoleChanged(from: decoder) { + self = .auditDetailsRoleChanged(value) + return + } + if let value = try? AuditDetailsVideoCall(from: decoder) { + self = .auditDetailsVideoCall(value) + return + } + if let value = try? AuditDetailsVideoCallRecording(from: decoder) { + self = .auditDetailsVideoCallRecording(value) + return } + if let value = try? AuditDetailsBotScopes(from: decoder) { + self = .auditDetailsBotScopes(value) + return + } + if let value = try? AuditDetailsChatRenamed(from: decoder) { + self = .auditDetailsChatRenamed(value) + return + } + if let value = try? AuditDetailsTagChat(from: decoder) { + self = .auditDetailsTagChat(value) + return + } + if let value = try? AuditDetailsBotWebhookSettings(from: decoder) { + self = .auditDetailsBotWebhookSettings(value) + return + } + if let value = try? AuditDetailsChatId(from: decoder) { + self = .auditDetailsChatId(value) + return + } + if let value = try? AuditDetailsChatPermission(from: decoder) { + self = .auditDetailsChatPermission(value) + return + } + if let value = try? AuditDetailsInitiator(from: decoder) { + self = .auditDetailsInitiator(value) + return + } + if let value = try? AuditDetailsInviter(from: decoder) { + self = .auditDetailsInviter(value) + return + } + if let value = try? AuditDetailsTagName(from: decoder) { + self = .auditDetailsTagName(value) + return + } + if let value = try? AuditDetailsTokenScopes(from: decoder) { + self = .auditDetailsTokenScopes(value) + return + } + if let value = try? AuditDetailsUserUpdated(from: decoder) { + self = .auditDetailsUserUpdated(value) + return + } + if let value = try? AuditDetailsEmpty(from: decoder) { + self = .auditDetailsEmpty(value) + return + } + throw DecodingError.dataCorrupted( + DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "No AuditEventDetailsUnion member matched the payload") + ) } public func encode(to encoder: Encoder) throws { @@ -3472,14 +3501,14 @@ struct UserDataWrapper: Codable { let data: User } -struct AvatarDataDataWrapper: Codable { - let data: AvatarData -} - struct UserStatusDataWrapper: Codable { let data: UserStatus } +struct AvatarDataDataWrapper: Codable { + let data: AvatarData +} + struct TaskDataWrapper: Codable { let data: Task } diff --git a/sdk/swift/generated/Sources/Pachca/GeneratedSources/Utils.swift b/sdk/swift/generated/Sources/Pachca/GeneratedSources/Utils.swift index 11593c56f..8b1fc5e6a 100644 --- a/sdk/swift/generated/Sources/Pachca/GeneratedSources/Utils.swift +++ b/sdk/swift/generated/Sources/Pachca/GeneratedSources/Utils.swift @@ -23,6 +23,38 @@ func deserialize(_ type: T.Type, from data: Data) throws -> T { return try pachcaDecoder.decode(type, from: data) } +public struct AnyCodable: Codable { + public let value: Any + + public init(_ value: Any) { self.value = value } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + if container.decodeNil() { value = NSNull() } + else if let b = try? container.decode(Bool.self) { value = b } + else if let i = try? container.decode(Int.self) { value = i } + else if let d = try? container.decode(Double.self) { value = d } + else if let s = try? container.decode(String.self) { value = s } + else if let a = try? container.decode([AnyCodable].self) { value = a.map { $0.value } } + else if let o = try? container.decode([String: AnyCodable].self) { value = o.mapValues { $0.value } } + else { value = NSNull() } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch value { + case is NSNull: try container.encodeNil() + case let b as Bool: try container.encode(b) + case let i as Int: try container.encode(i) + case let d as Double: try container.encode(d) + case let s as String: try container.encode(s) + case let a as [Any]: try container.encode(a.map { AnyCodable($0) }) + case let o as [String: Any]: try container.encode(o.mapValues { AnyCodable($0) }) + default: try container.encodeNil() + } + } +} + private let maxRetries = 3 private let retryable5xx: Set = [500, 502, 503, 504] diff --git a/sdk/swift/generated/examples.json b/sdk/swift/generated/examples.json index af06a332b..b6ac87242 100644 --- a/sdk/swift/generated/examples.json +++ b/sdk/swift/generated/examples.json @@ -6,7 +6,7 @@ ] }, "SecurityOperations_getAuditEvents": { - "usage": "let response = try await client.security.getAuditEvents(startTime: \"2025-05-01T09:11:00Z\", endTime: \"2025-05-02T09:11:00Z\", eventKey: .userLogin, actorId: \"98765\", actorType: \"User\", entityId: \"98765\", entityType: \"User\", limit: 1, cursor: \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\")", + "usage": "let response = try await client.security.getAuditEvents(startTime: \"2025-05-01T09:11:00.000Z\", endTime: \"2025-05-02T09:11:00.000Z\", eventKey: .userLogin, actorId: \"98765\", actorType: \"User\", entityId: \"98765\", entityType: \"User\", limit: 1, cursor: \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\")", "output": "GetAuditEventsResponse(data: [AuditEvent], meta: PaginationMeta)", "imports": [ "AuditEventKey" @@ -260,7 +260,7 @@ }, "ReactionOperations_addReaction": { "usage": "let body = ReactionRequest(code: \"👍\", name: \":+1:\")\nlet response = try await client.reactions.addReaction(id: 7231942, body: body)", - "output": "Reaction(userId: Int, createdAt: String, code: String, name: String?)", + "output": "Reaction(userId: Int, createdAt: String, code: String, name: String)", "imports": [ "ReactionRequest" ] @@ -294,11 +294,11 @@ }, "ProfileOperations_getProfile": { "usage": "let response = try await client.profile.getProfile()", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)" + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)" }, "ProfileOperations_getStatus": { "usage": "let response = try await client.profile.getStatus()", - "output": "String" + "output": "UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)" }, "ProfileAvatarOperations_updateProfileAvatar": { "usage": "let image = Data()\nlet response = try await client.profile.updateProfileAvatar(image: image)", @@ -349,11 +349,11 @@ }, "TaskOperations_getTask": { "usage": "let response = try await client.tasks.getTask(id: 22283)", - "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)])" + "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)])" }, "TaskOperations_createTask": { "usage": "let body = TaskCreateRequest(\n task: TaskCreateRequestTask(\n kind: .reminder,\n content: \"Забрать со склада 21 заказ\",\n dueAt: \"2020-06-05T12:00:00.000+03:00\",\n priority: 2,\n performerIds: [123],\n chatId: 456,\n allDay: false,\n customProperties: [TaskCreateRequestCustomProperty(id: 78, value: \"Синий склад\")]\n )\n)\nlet response = try await client.tasks.createTask(body: body)", - "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)])", + "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)])", "imports": [ "TaskCreateRequest", "TaskCreateRequestCustomProperty", @@ -363,7 +363,7 @@ }, "TaskOperations_updateTask": { "usage": "let body = TaskUpdateRequest(\n task: TaskUpdateRequestTask(\n kind: .reminder,\n content: \"Забрать со склада 21 заказ\",\n dueAt: \"2020-06-05T12:00:00.000+03:00\",\n priority: 2,\n performerIds: [123],\n status: .done,\n allDay: false,\n doneAt: \"2020-06-05T12:00:00.000Z\",\n customProperties: [TaskUpdateRequestCustomProperty(id: 78, value: \"Синий склад\")]\n )\n)\nlet response = try await client.tasks.updateTask(id: 22283, body: body)", - "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)])", + "output": "Task(id: Int, kind: TaskKind, content: String, dueAt: String?, priority: Int, userId: Int, chatId: Int?, status: TaskStatus, createdAt: String, performerIds: [Int], allDay: Bool, customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)])", "imports": [ "TaskKind", "TaskStatus", @@ -381,15 +381,15 @@ }, "UserOperations_getUser": { "usage": "let response = try await client.users.getUser(id: 12)", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)" + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)" }, "UserStatusOperations_getUserStatus": { "usage": "let response = try await client.users.getUserStatus(userId: 12)", - "output": "String" + "output": "UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)" }, "UserOperations_createUser": { "usage": "let body = UserCreateRequest(\n user: UserCreateRequestUser(\n firstName: \"Олег\",\n lastName: \"Петров\",\n email: \"olegp@example.com\",\n phoneNumber: \"+79001234567\",\n nickname: \"olegpetrov\",\n department: \"Продукт\",\n title: \"CIO\",\n role: .user,\n suspended: false,\n listTags: [\"example\"],\n chatIds: [123],\n customProperties: [UserCreateRequestCustomProperty(id: 1678, value: \"Санкт-Петербург\")]\n ),\n skipEmailNotify: false\n)\nlet response = try await client.users.createUser(body: body)", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)", + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)", "imports": [ "UserCreateRequest", "UserCreateRequestCustomProperty", @@ -399,7 +399,7 @@ }, "UserOperations_updateUser": { "usage": "let body = UserUpdateRequest(\n user: UserUpdateRequestUser(\n firstName: \"Олег\",\n lastName: \"Петров\",\n email: \"olegpetrov@example.com\",\n phoneNumber: \"+79001234567\",\n nickname: \"olegpetrov\",\n department: \"Отдел разработки\",\n title: \"Старший разработчик\",\n role: .user,\n suspended: false,\n listTags: [\"example\"],\n customProperties: [UserUpdateRequestCustomProperty(id: 1678, value: \"Санкт-Петербург\")]\n )\n)\nlet response = try await client.users.updateUser(id: 12, body: body)", - "output": "User(id: Int, firstName: String, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)", + "output": "User(id: Int, firstName: String?, lastName: String?, nickname: String, email: String?, phoneNumber: String?, department: String?, title: String?, role: UserRole, suspended: Bool, inviteStatus: InviteStatus, inviterId: Int?, listTags: [String], customProperties: [CustomProperty(id: Int, name: String, dataType: CustomPropertyDataType, value: String?)], userStatus: UserStatus(emoji: String, title: String, expiresAt: String?, isAway: Bool, awayMessage: UserStatusAwayMessage(text: String)?)?, bot: Bool, sso: Bool, createdAt: String, lastActivityAt: String?, timeZone: String?, imageUrl: String?)", "imports": [ "UserRoleInput", "UserUpdateRequest", @@ -429,7 +429,7 @@ "usage": "try await client.users.deleteUserStatus(userId: 12)" }, "FormOperations_openView": { - "usage": "let body = OpenViewRequest(\n type: \"modal\",\n triggerId: \"791a056b-006c-49dd-834b-c633fde52fe8\",\n privateMetadata: \"{\\\"timeoff_id\\\":4378}\",\n callbackId: \"timeoff_reguest_form\",\n view: OpenViewRequestView(\n title: \"Уведомление об отпуске\",\n closeText: \"Закрыть\",\n submitText: \"Отправить заявку\",\n blocks: [ViewBlockHeader(type: \"header\", text: \"Основная информация\")]\n )\n)\ntry await client.views.openView(body: body)", + "usage": "let body = OpenViewRequest(\n type: \"modal\",\n triggerId: \"791a056b-006c-49dd-834b-c633fde52fe8\",\n privateMetadata: \"{\\\"timeoff_id\\\":4378}\",\n callbackId: \"timeoff_request_form\",\n view: OpenViewRequestView(\n title: \"Уведомление об отпуске\",\n closeText: \"Закрыть\",\n submitText: \"Отправить заявку\",\n blocks: [ViewBlockHeader(type: \"header\", text: \"Основная информация\")]\n )\n)\ntry await client.views.openView(body: body)", "imports": [ "OpenViewRequest", "OpenViewRequestView", diff --git a/sdk/typescript/examples/stub.ts b/sdk/typescript/examples/stub.ts index cdb242a5d..3dddbf3a1 100644 --- a/sdk/typescript/examples/stub.ts +++ b/sdk/typescript/examples/stub.ts @@ -20,10 +20,7 @@ class FakeMessages extends MessagesService { } } -const client = PachcaClient.stub( - undefined, undefined, undefined, undefined, undefined, undefined, - new FakeMessages(), -); +const client = PachcaClient.stub({ messages: new FakeMessages() }); const msg = await client.messages.getMessage(1); console.log(`Got: "${msg.content}" (id=${msg.id})`); diff --git a/sdk/typescript/examples/upload.ts b/sdk/typescript/examples/upload.ts index a594cfd9a..05b599682 100644 --- a/sdk/typescript/examples/upload.ts +++ b/sdk/typescript/examples/upload.ts @@ -10,7 +10,7 @@ import { readFileSync, statSync } from "node:fs"; import { basename } from "node:path"; -import { PachcaClient } from "../src/index.js"; +import { FileType, PachcaClient } from "../src/index.js"; const token = process.env.PACHCA_TOKEN; const chatIdStr = process.env.PACHCA_CHAT_ID; @@ -65,7 +65,7 @@ const msg = await client.messages.createMessage({ { key, name: filename, - fileType: "file", + fileType: FileType.File, size: fileSize, }, ], diff --git a/sdk/typescript/examples/webhook-history.ts b/sdk/typescript/examples/webhook-history.ts index 5953f980d..8ee69cac7 100644 --- a/sdk/typescript/examples/webhook-history.ts +++ b/sdk/typescript/examples/webhook-history.ts @@ -13,6 +13,7 @@ import type { LinkSharedWebhookPayload, MessageWebhookPayload, ReactionWebhookPayload, + VideoCallWebhookPayload, ViewSubmitWebhookPayload, WebhookPayloadUnion, } from "../src/generated/types.js"; @@ -67,6 +68,10 @@ function summarizePayload(payload: WebhookPayloadUnion): string { const member = payload as CompanyMemberWebhookPayload; return `company_member event=${member.event} users=${member.userIds.length}`; } + case "video_call": { + const call = payload as VideoCallWebhookPayload; + return `video_call event=${call.event} chat_id=${call.chatId} room_id=${call.videoRoomId}`; + } default: return "unknown"; } diff --git a/sdk/typescript/package.json b/sdk/typescript/package.json index fad27bb7a..751f35ee6 100644 --- a/sdk/typescript/package.json +++ b/sdk/typescript/package.json @@ -17,7 +17,10 @@ } } }, - "files": ["dist", "src/generated"], + "files": [ + "dist", + "src/generated" + ], "repository": { "type": "git", "url": "git+https://github.com/pachca/openapi.git", @@ -33,11 +36,13 @@ "build": "tsc && tsc -p tsconfig.cjs.json && node -e \"require('fs').writeFileSync('dist/cjs/package.json','{\\\"type\\\":\\\"commonjs\\\"}')\"", "typecheck": "tsc --noEmit", "test:node": "node test/smoke.mjs && node test/smoke.cjs", - "verify": "node scripts/verify.mjs" + "verify": "node scripts/verify.mjs", + "typecheck:examples": "tsc --noEmit -p tsconfig.examples.json" }, "dependencies": {}, "devDependencies": { "@pachca/spec": "workspace:*", + "@types/node": "^22.14.0", "typescript": "^5.0.0" } } diff --git a/sdk/typescript/src/generated/client.ts b/sdk/typescript/src/generated/client.ts index c5e360a7d..3c01ab75d 100644 --- a/sdk/typescript/src/generated/client.ts +++ b/sdk/typescript/src/generated/client.ts @@ -52,9 +52,9 @@ import { ListThreadsResponse, Thread, AccessTokenInfo, + UserStatus, AvatarData, StatusUpdateRequest, - UserStatus, SearchChatsParams, SearchChatsResponse, SearchMessagesParams, @@ -1558,7 +1558,7 @@ export class ProfileService { throw new Error("Profile.getProfile is not implemented"); } - async getStatus(): Promise { + async getStatus(): Promise { throw new Error("Profile.getStatus is not implemented"); } @@ -1606,14 +1606,14 @@ export class ProfileServiceImpl extends ProfileService { } } - async getStatus(): Promise { + async getStatus(): Promise { const response = await fetchWithRetry(`${this.baseUrl}/profile/status`, { headers: this.headers, }); const body = await response.json(); switch (response.status) { case 200: - return deserializeType("unknown", body) as unknown; + return deserializeType("UserStatus", body.data) as UserStatus; case 401: throw new OAuthError(body.error); default: @@ -2003,7 +2003,7 @@ export class UsersService { throw new Error("Users.getUser is not implemented"); } - async getUserStatus(userId: number): Promise { + async getUserStatus(userId: number): Promise { throw new Error("Users.getUserStatus is not implemented"); } @@ -2093,14 +2093,14 @@ export class UsersServiceImpl extends UsersService { } } - async getUserStatus(userId: number): Promise { + async getUserStatus(userId: number): Promise { const response = await fetchWithRetry(`${this.baseUrl}/users/${userId}/status`, { headers: this.headers, }); const body = await response.json(); switch (response.status) { case 200: - return deserializeType("unknown", body) as unknown; + return deserializeType("UserStatus", body.data) as UserStatus; case 401: throw new OAuthError(body.error); default: diff --git a/sdk/typescript/src/generated/examples.json b/sdk/typescript/src/generated/examples.json index 8dab9f416..2564122a4 100644 --- a/sdk/typescript/src/generated/examples.json +++ b/sdk/typescript/src/generated/examples.json @@ -6,7 +6,7 @@ ] }, "SecurityOperations_getAuditEvents": { - "usage": "const response = client.security.getAuditEvents({\n startTime: \"2025-05-01T09:11:00Z\",\n endTime: \"2025-05-02T09:11:00Z\",\n eventKey: AuditEventKey.UserLogin,\n actorId: \"98765\",\n actorType: \"User\",\n entityId: \"98765\",\n entityType: \"User\",\n limit: 1,\n cursor: \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\"\n})", + "usage": "const response = client.security.getAuditEvents({\n startTime: \"2025-05-01T09:11:00.000Z\",\n endTime: \"2025-05-02T09:11:00.000Z\",\n eventKey: AuditEventKey.UserLogin,\n actorId: \"98765\",\n actorType: \"User\",\n entityId: \"98765\",\n entityType: \"User\",\n limit: 1,\n cursor: \"eyJpZCI6MTAsImRpciI6ImFzYyJ9\"\n})", "output": "GetAuditEventsResponse({ data: AuditEvent[], meta: PaginationMeta })", "imports": [ "AuditEventKey" @@ -212,11 +212,11 @@ }, "MessageOperations_getMessage": { "usage": "const response = client.messages.getMessage(194275)", - "output": "Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null })" + "output": "Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null })" }, "MessageOperations_createMessage": { "usage": "const request: MessageCreateRequest = {\n message: {\n entityType: MessageEntityType.Discussion,\n entityId: 334,\n content: \"Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)\",\n files: [{\n key: \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n name: \"logo.png\",\n fileType: FileType.Image,\n size: 12345,\n width: 800,\n height: 600,\n durationMs: 5400,\n waveform: \"4,8,12,20,16,10,6,3\"\n }],\n buttons: [[{\n text: \"Подробнее\",\n url: \"https://example.com/details\",\n data: \"awesome\"\n }]],\n parentMessageId: 194270,\n displayAvatarUrl: \"https://example.com/avatar.png\",\n displayName: \"Бот Поддержки\",\n skipInviteMentions: false\n },\n linkPreview: false\n}\nconst response = client.messages.createMessage(request)", - "output": "Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null })", + "output": "Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null })", "imports": [ "Button", "FileType", @@ -239,7 +239,7 @@ }, "MessageOperations_updateMessage": { "usage": "const request: MessageUpdateRequest = {\n message: {\n content: \"Вот попробуйте написать правильно это с первого раза: Будущий, Полощи, Прийти, Грейпфрут, Мозаика, Бюллетень, Дуршлаг, Винегрет.\",\n files: [{\n key: \"attaches/files/93746/e354fd79-4f3e-4b5a-9c8d-1a2b3c4d5e6f/logo.png\",\n name: \"logo.png\",\n fileType: FileType.Image,\n size: 12345,\n width: 800,\n height: 600,\n durationMs: 5400,\n waveform: \"4,8,12,20,16,10,6,3\"\n }],\n buttons: [[{\n text: \"Подробнее\",\n url: \"https://example.com/details\",\n data: \"awesome\"\n }]],\n displayAvatarUrl: \"https://example.com/avatar.png\",\n displayName: \"Бот Поддержки\"\n }\n}\nconst response = client.messages.updateMessage(194275, request)", - "output": "Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl: string | null, displayName: string | null, changedAt: string | null, deletedAt: string | null })", + "output": "Message({ id: number, entityType: MessageEntityType, entityId: number, chatId: number, rootChatId: number, content: string, userId: number, createdAt: string, url: string, files: File({ id: number, key: string, name: string, fileType: FileType, url: string, width?: number | null, height?: number | null })[], voiceContent: VoiceContent({ durationMs: number, waveform: string, transcript: string | null }) | null, buttons: Button({ text: string, url?: string, data?: string })[][] | null, thread: MessageThread({ id: number, chatId: number }) | null, forwarding: Forwarding({ originalMessageId: number, originalChatId: number, authorId: number, originalCreatedAt: string, originalThreadId: number | null, originalThreadMessageId: number | null, originalThreadParentChatId: number | null }) | null, parentMessageId: number | null, displayAvatarUrl?: string | null, displayName?: string | null, changedAt: string | null, deletedAt: string | null })", "imports": [ "Button", "FileType", @@ -260,7 +260,7 @@ }, "ReactionOperations_addReaction": { "usage": "const request: ReactionRequest = { code: \"👍\", name: \":+1:\" }\nconst response = client.reactions.addReaction(7231942, request)", - "output": "Reaction({ userId: number, createdAt: string, code: string, name: string | null })", + "output": "Reaction({ userId: number, createdAt: string, code: string, name: string })", "imports": [ "ReactionRequest" ] @@ -294,11 +294,11 @@ }, "ProfileOperations_getProfile": { "usage": "const response = client.profile.getProfile()", - "output": "User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })" + "output": "User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })" }, "ProfileOperations_getStatus": { "usage": "const response = client.profile.getStatus()", - "output": "unknown" + "output": "UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null })" }, "ProfileAvatarOperations_updateProfileAvatar": { "usage": "const image = new Blob([])\nconst response = client.profile.updateProfileAvatar(image)", @@ -349,11 +349,11 @@ }, "TaskOperations_getTask": { "usage": "const response = client.tasks.getTask(22283)", - "output": "Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] })" + "output": "Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] })" }, "TaskOperations_createTask": { "usage": "const request: TaskCreateRequest = {\n task: {\n kind: TaskKind.Reminder,\n content: \"Забрать со склада 21 заказ\",\n dueAt: \"2020-06-05T12:00:00.000+03:00\",\n priority: 2,\n performerIds: [123],\n chatId: 456,\n allDay: false,\n customProperties: [{ id: 78, value: \"Синий склад\" }]\n }\n}\nconst response = client.tasks.createTask(request)", - "output": "Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] })", + "output": "Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] })", "imports": [ "TaskCreateRequest", "TaskCreateRequestCustomProperty", @@ -363,7 +363,7 @@ }, "TaskOperations_updateTask": { "usage": "const request: TaskUpdateRequest = {\n task: {\n kind: TaskKind.Reminder,\n content: \"Забрать со склада 21 заказ\",\n dueAt: \"2020-06-05T12:00:00.000+03:00\",\n priority: 2,\n performerIds: [123],\n status: TaskStatus.Done,\n allDay: false,\n doneAt: \"2020-06-05T12:00:00.000Z\",\n customProperties: [{ id: 78, value: \"Синий склад\" }]\n }\n}\nconst response = client.tasks.updateTask(22283, request)", - "output": "Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[] })", + "output": "Task({ id: number, kind: TaskKind, content: string, dueAt: string | null, priority: number, userId: number, chatId: number | null, status: TaskStatus, createdAt: string, performerIds: number[], allDay: boolean, customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[] })", "imports": [ "TaskKind", "TaskStatus", @@ -381,15 +381,15 @@ }, "UserOperations_getUser": { "usage": "const response = client.users.getUser(12)", - "output": "User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })" + "output": "User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })" }, "UserStatusOperations_getUserStatus": { "usage": "const response = client.users.getUserStatus(12)", - "output": "unknown" + "output": "UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null })" }, "UserOperations_createUser": { "usage": "const request: UserCreateRequest = {\n user: {\n firstName: \"Олег\",\n lastName: \"Петров\",\n email: \"olegp@example.com\",\n phoneNumber: \"+79001234567\",\n nickname: \"olegpetrov\",\n department: \"Продукт\",\n title: \"CIO\",\n role: UserCreateRole.User,\n suspended: false,\n listTags: [\"example\"],\n chatIds: [123],\n customProperties: [{ id: 1678, value: \"Санкт-Петербург\" }]\n },\n skipEmailNotify: false\n}\nconst response = client.users.createUser(request)", - "output": "User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })", + "output": "User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })", "imports": [ "UserCreateRequest", "UserCreateRequestCustomProperty", @@ -399,7 +399,7 @@ }, "UserOperations_updateUser": { "usage": "const request: UserUpdateRequest = {\n user: {\n firstName: \"Олег\",\n lastName: \"Петров\",\n email: \"olegpetrov@example.com\",\n phoneNumber: \"+79001234567\",\n nickname: \"olegpetrov\",\n department: \"Отдел разработки\",\n title: \"Старший разработчик\",\n role: UserRoleInput.User,\n suspended: false,\n listTags: [\"example\"],\n customProperties: [{ id: 1678, value: \"Санкт-Петербург\" }]\n }\n}\nconst response = client.users.updateUser(12, request)", - "output": "User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })", + "output": "User({ id: number, firstName: string | null, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string | null })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })", "imports": [ "UserRoleInput", "UserUpdateRequest", @@ -429,7 +429,7 @@ "usage": "client.users.deleteUserStatus(12)" }, "FormOperations_openView": { - "usage": "const request: OpenViewRequest = {\n type: \"modal\",\n triggerId: \"791a056b-006c-49dd-834b-c633fde52fe8\",\n privateMetadata: \"{\\\"timeoff_id\\\":4378}\",\n callbackId: \"timeoff_reguest_form\",\n view: {\n title: \"Уведомление об отпуске\",\n closeText: \"Закрыть\",\n submitText: \"Отправить заявку\",\n blocks: [{ type: \"header\", text: \"Основная информация\" }]\n }\n}\nclient.views.openView(request)", + "usage": "const request: OpenViewRequest = {\n type: \"modal\",\n triggerId: \"791a056b-006c-49dd-834b-c633fde52fe8\",\n privateMetadata: \"{\\\"timeoff_id\\\":4378}\",\n callbackId: \"timeoff_request_form\",\n view: {\n title: \"Уведомление об отпуске\",\n closeText: \"Закрыть\",\n submitText: \"Отправить заявку\",\n blocks: [{ type: \"header\", text: \"Основная информация\" }]\n }\n}\nclient.views.openView(request)", "imports": [ "OpenViewRequest", "OpenViewRequestView", diff --git a/sdk/typescript/src/generated/types.ts b/sdk/typescript/src/generated/types.ts index 0c9b19fbd..1dbd8ad59 100644 --- a/sdk/typescript/src/generated/types.ts +++ b/sdk/typescript/src/generated/types.ts @@ -631,7 +631,7 @@ export interface ApiErrorItem { value: string | null; message: string; code: ValidationErrorCode; - payload: Record | null; + payload: Record | null; } export interface AuditDetailsBotScopes { @@ -640,7 +640,7 @@ export interface AuditDetailsBotScopes { } export interface AuditDetailsBotWebhookSettings { - changes: Record; + changes: Record; } export interface AuditDetailsChatId { @@ -694,7 +694,7 @@ export interface AuditDetailsSearch { queryPresent: boolean; cursorPresent: boolean; limit: number; - filters: Record; + filters: Record; } export interface AuditDetailsTagChat { @@ -905,7 +905,7 @@ export interface CustomProperty { id: number; name: string; dataType: CustomPropertyDataType; - value: string; + value: string | null; } export interface CustomPropertyDefinition { @@ -1012,8 +1012,8 @@ export interface Message { } | null; forwarding: Forwarding | null; parentMessageId: number | null; - displayAvatarUrl: string | null; - displayName: string | null; + displayAvatarUrl?: string | null; + displayName?: string | null; changedAt: string | null; deletedAt: string | null; } @@ -1121,7 +1121,7 @@ export interface Reaction { userId: number; createdAt: string; code: string; - name: string | null; + name: string; } export interface ReactionRequest { @@ -1238,7 +1238,7 @@ export interface UploadParams { export interface User { id: number; - firstName: string; + firstName: string | null; lastName: string | null; nickname: string; email: string | null; @@ -1466,7 +1466,7 @@ export interface ViewSubmitWebhookPayload { privateMetadata: string | null; chatId: number | null; userId: number; - data: Record; + data: Record; webhookTimestamp: number; } diff --git a/sdk/typescript/tsconfig.examples.json b/sdk/typescript/tsconfig.examples.json new file mode 100644 index 000000000..3fc7e7ec3 --- /dev/null +++ b/sdk/typescript/tsconfig.examples.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "." + }, + "include": ["src", "examples"] +} diff --git a/skills/pachca-bots/SKILL.md b/skills/pachca-bots/SKILL.md index 679350c10..8004fcaa2 100644 --- a/skills/pachca-bots/SKILL.md +++ b/skills/pachca-bots/SKILL.md @@ -8,7 +8,8 @@ description: > модальных окон. Разворачивание ссылок (unfurl) — в pachca-messages. Use when: настроить бота, создать бота, вебхук, обработать вебхук, подпись вебхука, callback, обработать callback, нажатие кнопки, дайджест, оповещение. NOT for: - отправить сообщение, показать форму, модальное окно. + отправить сообщение, показать форму, модальное окно, → pachca-messages, → + pachca-forms. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/skills/pachca-chats/SKILL.md b/skills/pachca-chats/SKILL.md index d16f81248..5a0f4b727 100644 --- a/skills/pachca-chats/SKILL.md +++ b/skills/pachca-chats/SKILL.md @@ -8,7 +8,8 @@ description: > в тред. Use when: создать канал, создать беседу, создать чат, добавить участника, удалить участника, архивировать чат, роли участников, экспорт сообщений, список чатов, каналы. NOT for: отправить сообщение, ответить в тред, - загрузить файл. + загрузить файл, → pachca-messages, → pachca-users, полнотекстовый поиск чатов по + названию → pachca-search. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/skills/pachca-custom-properties/SKILL.md b/skills/pachca-custom-properties/SKILL.md deleted file mode 100644 index 885c75b0f..000000000 --- a/skills/pachca-custom-properties/SKILL.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -name: pachca-custom-properties -description: > - Auto-discovered skill: pachca-custom-properties. Use when: GET - /custom_properties. -allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) ---- - -# pachca-custom-properties - -## Quick start - -Ask the user for a Pachca token (bot: Automations → Integrations → API, user: Automations → API). - -Run commands via `npx -y @pachca/cli` with the `--token` flag: - - npx -y @pachca/cli --token $PACHCA_TOKEN - -Or set the `PACHCA_TOKEN` environment variable: - - export PACHCA_TOKEN= - npx -y @pachca/cli - -Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` - -> After successful use, suggest installing CLI globally: `npm install -g @pachca/cli && pachca auth login --token $PACHCA_TOKEN` - -## Before you start - -1. If the user has a saved profile — check: - - npx -y @pachca/cli auth status - - If OK — run commands without `--token`. - -2. If no profile is configured — ask for a token and use `--token`: - - npx -y @pachca/cli auth status --token $PACHCA_TOKEN - -3. If you don't know the parameters — run `pachca --help`. - -## Limitations - -- Rate limit: ~50 req/sec. On 429 — wait and retry. -- Pagination: cursor-based (limit + cursor) - -## Endpoints - -| Method | Path | Description | -|--------|------|-------------| -| GET | /custom_properties | Список дополнительных полей | - -> If unsure how to complete a task, read the corresponding file from references/. diff --git a/skills/pachca-files/SKILL.md b/skills/pachca-files/SKILL.md deleted file mode 100644 index b57cb552f..000000000 --- a/skills/pachca-files/SKILL.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -name: pachca-files -description: > - Auto-discovered skill: pachca-files. Use when: POST /direct_url, POST /uploads. -allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) ---- - -# pachca-files - -## Quick start - -Ask the user for a Pachca token (bot: Automations → Integrations → API, user: Automations → API). - -Run commands via `npx -y @pachca/cli` with the `--token` flag: - - npx -y @pachca/cli --token $PACHCA_TOKEN - -Or set the `PACHCA_TOKEN` environment variable: - - export PACHCA_TOKEN= - npx -y @pachca/cli - -Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` - -> After successful use, suggest installing CLI globally: `npm install -g @pachca/cli && pachca auth login --token $PACHCA_TOKEN` - -## Before you start - -1. If the user has a saved profile — check: - - npx -y @pachca/cli auth status - - If OK — run commands without `--token`. - -2. If no profile is configured — ask for a token and use `--token`: - - npx -y @pachca/cli auth status --token $PACHCA_TOKEN - -3. If you don't know the parameters — run `pachca --help`. - -## Limitations - -- Rate limit: ~50 req/sec. On 429 — wait and retry. - -## Endpoints - -| Method | Path | Description | -|--------|------|-------------| -| POST | /direct_url | Загрузка файла | -| POST | /uploads | Получение подписи, ключа и других параметров | - -> If unsure how to complete a task, read the corresponding file from references/. diff --git a/skills/pachca-forms/SKILL.md b/skills/pachca-forms/SKILL.md index d340d978c..3c20c6965 100644 --- a/skills/pachca-forms/SKILL.md +++ b/skills/pachca-forms/SKILL.md @@ -11,7 +11,7 @@ description: > собрать форму, модальное окно, модалка, отправка формы, обработать форму, валидация формы, валидация поля, view_submission, опрос, анкета, заявка, форма заявки, form, modal, interactive form. NOT for: кнопки в сообщении, настроить - бота, вебхук. + бота, вебхук, → pachca-messages, → pachca-bots. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/skills/pachca-messages/SKILL.md b/skills/pachca-messages/SKILL.md index 05483f8e5..bb22633e7 100644 --- a/skills/pachca-messages/SKILL.md +++ b/skills/pachca-messages/SKILL.md @@ -11,7 +11,9 @@ description: > в тред, тред, прикрепить файл, загрузить файл, поставить реакцию, история сообщений, закрепить сообщение, изменить сообщение, удалить сообщение, упомянуть, кнопки в сообщении, кто прочитал, ответь в тред. NOT for: создать - канал, управление участниками, настроить бота, вебхук, форма. + канал, управление участниками, настроить бота, вебхук, форма, → pachca-chats, → + pachca-bots, → pachca-forms, найти сообщение по тексту, полнотекстовый поиск → + pachca-search. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- @@ -96,7 +98,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` 1. Получи или создай тред, возьми `thread.id` из ответа: ```bash - pachca thread add + pachca threads add ``` > Если тред уже существует, вернётся существующий @@ -164,7 +166,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` 1. Получи или создай тред, возьми `chat_id` из ответа: ```bash - pachca thread add + pachca threads add ``` 2. Добавь бота в участники чата треда: @@ -275,6 +277,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` | Method | Path | Description | |--------|------|-------------| +| POST | /direct_url | Загрузка файла | | POST | /messages | Новое сообщение | | GET | /messages | Список сообщений чата | | GET | /messages/{id} | Информация о сообщении | @@ -291,6 +294,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` | POST | /threads | Новый самостоятельный тред | | GET | /threads | Список тредов | | GET | /threads/{id} | Информация о треде | +| POST | /uploads | Получение подписи, ключа и других параметров | ## Advanced workflows diff --git a/skills/pachca-oauth/SKILL.md b/skills/pachca-oauth/SKILL.md index af8bbdd31..a6a27dc18 100644 --- a/skills/pachca-oauth/SKILL.md +++ b/skills/pachca-oauth/SKILL.md @@ -8,7 +8,8 @@ description: > НЕ для управления своим профилем или статусом (используй pachca-profile), НЕ для выпуска или ротации токенов ботов (используй pachca-bots). Use when: информация о токене, проверить токен, скоупы токена, права токена, чей токен, token info. - NOT for: мой профиль, мой статус, создать бота, ротация токена. + NOT for: мой профиль, мой статус, создать бота, ротация токена, → + pachca-profile, → pachca-bots. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/skills/pachca-profile/SKILL.md b/skills/pachca-profile/SKILL.md index d32dab808..6c36a8c42 100644 --- a/skills/pachca-profile/SKILL.md +++ b/skills/pachca-profile/SKILL.md @@ -10,7 +10,8 @@ description: > сотрудника, НЕ для информации о токене и его скоупах (используй pachca-oauth). Use when: мой профиль, покажи профиль, мой статус, установить статус, убрать статус, кто я, мой email, мои данные, дополнительные поля, кастомные поля. NOT - for: сотрудники, список сотрудников, создать сотрудника, статус сотрудника. + for: сотрудники, список сотрудников, создать сотрудника, статус сотрудника, → + pachca-users, → pachca-oauth. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- @@ -130,6 +131,7 @@ Help: `npx -y @pachca/cli --help` | Workflows: `npx -y @pachca/cli guide` | Method | Path | Description | |--------|------|-------------| +| GET | /custom_properties | Список дополнительных полей | | GET | /profile | Свой профиль | | PUT | /profile/avatar | Загрузка своего аватара | | DELETE | /profile/avatar | Удаление своего аватара | diff --git a/skills/pachca-search/SKILL.md b/skills/pachca-search/SKILL.md index dc35a88e7..63f86f4db 100644 --- a/skills/pachca-search/SKILL.md +++ b/skills/pachca-search/SKILL.md @@ -9,7 +9,7 @@ description: > всех сотрудников, всех чатов или отправки сообщений. Use when: поиск, найти сообщение, найти чат, найти сотрудника, искать, где обсуждали, кто писал, полнотекстовый поиск. NOT for: список сотрудников, список чатов, отправить - сообщение. + сообщение, → pachca-users, → pachca-chats. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/skills/pachca-users/SKILL.md b/skills/pachca-users/SKILL.md index 38beebf08..668345c3a 100644 --- a/skills/pachca-users/SKILL.md +++ b/skills/pachca-users/SKILL.md @@ -10,7 +10,9 @@ description: > Use when: сотрудник, сотрудники, список сотрудников, создать сотрудника, заблокировать сотрудника, уволить сотрудника, тег, теги, группа сотрудников, добавить в тег, онбординг, оффбординг. NOT for: мой профиль, мой статус, найди - сотрудника, найти сотрудника, кастомные поля, дополнительные поля. + сотрудника, найти сотрудника, кастомные поля, дополнительные поля, получить + профиль, мой профиль, установить свой статус → pachca-profile, → pachca-chats, + найти сообщение по тексту, полнотекстовый поиск → pachca-search. allowed-tools: Bash(npx:*), Bash(pachca:*), Bash(which:*), Bash(npm:*) --- diff --git a/turbo.json b/turbo.json index 353e1a71c..7156cf7fb 100644 --- a/turbo.json +++ b/turbo.json @@ -87,7 +87,7 @@ }, "build": { "dependsOn": ["^build", "generate", "overlay:apply", "generate-llms", "generate-cli", "generate-n8n"], - "outputs": [".next/**", "!.next/cache/**", ".build/**", "dist/**", "oclif.manifest.json", "src/data/commands.json", "generated/bin/**", "generated/obj/**"], + "outputs": [".next/**", "!.next/cache/**", ".build/**", "dist/**", "oclif.manifest.json", "src/data/commands.json", "CHANGELOG.md", "generated/bin/**", "generated/obj/**"], "cache": true }, "dev": { @@ -109,7 +109,7 @@ "cache": true }, "check": { - "dependsOn": ["lint", "typecheck", "knip", "format:check", "test", "@pachca/spec#overlay:validate", "check-models", "check-n8n-resources"], + "dependsOn": ["lint", "typecheck", "knip", "format:check", "test", "@pachca/spec#overlay:validate", "check-models", "check-n8n-resources", "check-examples", "check-anchors"], "cache": false }, "check-urls": { @@ -124,6 +124,16 @@ "inputs": ["scripts/check-models-coverage.mjs", "content/api/models.mdx"], "cache": true }, + "check-examples": { + "dependsOn": ["generate-llms"], + "inputs": ["scripts/check-examples.mjs", "public/api/**"], + "cache": true + }, + "check-anchors": { + "dependsOn": ["@pachca/spec#generate"], + "inputs": ["scripts/check-anchors.mjs", "content/**", "lib/utils/transliterate.ts"], + "cache": true + }, "update-snapshots": { "inputs": ["src/**", "tests/**/fixture.yaml"], "outputs": ["tests/**/snapshots/**"],