Версия 1 · чтение данных
PROChat API
Получайте сохранённые обращения, переписку, теги и поля через ключ с ограниченным доступом.
Скачать OpenAPIOpenAPI 3.1. Схемы ответов формируются из общих контрактов PROChat.
Быстрый старт
- Владелец или администратор создаёт ключ в Интеграции → API-ключи и выбирает подключения, разрешения и срок.
- После создания токен показывается один раз. Сохраните его в хранилище секретов своей серверной программы.
- Задайте
PROCHAT_API_ORIGIN — origin сервера (домен без пути), и PROCHAT_API_TOKEN — выданный токен.
Базовый путь: /api/integration/v1. Для внешнего доступа используйте HTTPS. Локальный backend по умолчанию работает на http://localhost:4000; создание ключа само по себе не публикует сервер.
curl --fail-with-body \
--header "Authorization: Bearer ${PROCHAT_API_TOKEN}" \
--header "Accept: application/json" \
"${PROCHAT_API_ORIGIN}/api/integration/v1/conversations?limit=50"
Переменные в примерах заполняются вашей программой. Имена, UUID и даты в ответах ниже вымышлены.
Авторизация и разрешения
Каждый запрос использует Authorization: Bearer <токен>. Формат токена: pc_api_ и 43 символа base64url, всего 50 символов. Это непрозрачный токен. Передача ключа в URL или cookie не заменяет заголовок.
Независимые разрешения ключа| Scope | Данные |
|---|
connections:read | Подключения |
conversations:read | Обращения |
messages:read | Текст сообщений |
cards:read | Теги и поля карточки |
Данные обращений ограничены выбранными подключениями. Например, messages:read позволяет прочитать сообщения известного обращения без conversations:read; поиск его ID в списке требует отдельного разрешения.
Разрешение cards:read также открывает активный каталог определений тегов и полей всего рабочего пространства. Значения карточек выдаются только для доступных обращений.
Срок — 7, 30, 90 или 365 дней. Отзыв ключа, изменение роли или версии доступа автора, а также удаление любого выбранного подключения прекращают доступ всего ключа. Отключённое подключение сохраняет доступ к уже записанной истории.
Сохраняйте ключ на сервере получателя. Доступ администратора к управлению ключами использует сессию PROChat; этот bearer-токен предназначен для методов чтения ниже.
Методы API
Все шесть методов используют GET. Неизвестные параметры, workspaceId и произвольные фильтры отклоняются.
Пути ниже добавляются к /api/integration/v1. В примерах cURL замените <ID_обращения> на UUID доступного обращения, полученный из списка или вебхука.
Подключения
Возвращает метаданные выбранных подключений без ключей и данных адаптера. Отключённый канал остаётся доступен для чтения сохранённой истории. Параметры запроса не принимаются.
Разрешение: connections:read
Параметры отсутствуют.
curl --fail-with-body \
--header "Authorization: Bearer ${PROCHAT_API_TOKEN}" \
"${PROCHAT_API_ORIGIN}/api/integration/v1/connections"
Пример ответа 200: Подключения
{
"items": [
{
"id": "00000000-0000-4000-8000-000000000001",
"name": "Авито — вымышленный пример",
"provider": "AVITO",
"mode": "MOCK",
"status": "CONNECTED"
}
]
}
Список обращений
Читает локальные обращения выбранных подключений. Порядок lastMessageAt DESC, id DESC. Имя клиента входит в метаданные; текст сообщений и заметки отсутствуют. nextCursor=null означает конец текущей выборки.
Разрешение: conversations:read
Параметры: Список обращений| Параметр | Тип и расположение | Описание |
|---|
limitНеобязательный | integer · query | Максимальное число записей на странице. По умолчанию: 50. Диапазон: 1–100. |
cursorНеобязательный | string · query | UUID из nextCursor предыдущей страницы. Используйте те же фильтры; курсор должен принадлежать доступной выборке. |
connectionIdНеобязательный | string · query | UUID одного из подключений, выбранных при выдаче ключа. |
statusНеобязательный | string · query | Фильтр по текущему статусу обращения. Значения: OPEN, CLOSED. |
curl --fail-with-body \
--header "Authorization: Bearer ${PROCHAT_API_TOKEN}" \
"${PROCHAT_API_ORIGIN}/api/integration/v1/conversations"
Пример ответа 200: Список обращений
{
"items": [
{
"id": "00000000-0000-4000-8000-000000000002",
"connectionId": "00000000-0000-4000-8000-000000000001",
"customerName": "Покупатель из вымышленного примера",
"status": "OPEN",
"handlingMode": "AUTOMATION",
"assignedUserId": null,
"assignmentVersion": 0,
"cardVersion": 0,
"lastMessageAt": "2026-10-14T12:00:00.000Z",
"createdAt": "2026-10-14T12:00:00.000Z"
}
],
"nextCursor": null
}
Одно обращение
Возвращает метаданные доступного обращения напрямую, без обёртки items. UUID объекта не заменяет права ключа. Параметры запроса не принимаются.
Разрешение: conversations:read
Параметры: Одно обращение| Параметр | Тип и расположение | Описание |
|---|
conversationIdОбязательный | string · path | UUID обращения PROChat из выбранного подключения. |
curl --fail-with-body \
--header "Authorization: Bearer ${PROCHAT_API_TOKEN}" \
"${PROCHAT_API_ORIGIN}/api/integration/v1/conversations/<ID_обращения>"
Пример ответа 200: Одно обращение
{
"id": "00000000-0000-4000-8000-000000000002",
"connectionId": "00000000-0000-4000-8000-000000000001",
"customerName": "Покупатель из вымышленного примера",
"status": "OPEN",
"handlingMode": "AUTOMATION",
"assignedUserId": null,
"assignmentVersion": 0,
"cardVersion": 0,
"lastMessageAt": "2026-10-14T12:00:00.000Z",
"createdAt": "2026-10-14T12:00:00.000Z"
}
История сообщений
Читает сохранённые сообщения от ранних к поздним: sentAt ASC, sequence ASC, id ASC. Текст до 16000 символов; вложения и их URL не выдаются. PENDING/SENDING/FAILED не подтверждают доставку. Курсор принадлежит тому же обращению; чтение не отмечает сообщения прочитанными.
Разрешение: messages:read
Параметры: История сообщений| Параметр | Тип и расположение | Описание |
|---|
conversationIdОбязательный | string · path | UUID обращения PROChat из выбранного подключения. |
limitНеобязательный | integer · query | Максимальное число записей на странице. По умолчанию: 50. Диапазон: 1–100. |
cursorНеобязательный | string · query | UUID из nextCursor предыдущей страницы. Используйте те же фильтры; курсор должен принадлежать доступной выборке. |
curl --fail-with-body \
--header "Authorization: Bearer ${PROCHAT_API_TOKEN}" \
"${PROCHAT_API_ORIGIN}/api/integration/v1/conversations/<ID_обращения>/messages"
Пример ответа 200: История сообщений
{
"items": [
{
"id": "00000000-0000-4000-8000-000000000005",
"conversationId": "00000000-0000-4000-8000-000000000002",
"connectionId": "00000000-0000-4000-8000-000000000001",
"type": "text",
"direction": "INBOUND",
"senderType": "CUSTOMER",
"status": "SENT",
"text": "Сообщение из вымышленного примера",
"sequence": 1,
"sentAt": "2026-10-14T12:00:00.000Z",
"createdAt": "2026-10-14T12:00:00.000Z"
}
],
"nextCursor": null
}
Карточка обращения
Возвращает назначенные теги, определения полей и сохранённые значения выбранного обращения. Назначенные архивные теги и архивные поля с сохранённым значением остаются видимыми. Пустое поле отсутствует в fieldValues. Внутренних заметок нет; параметры запроса не принимаются.
Разрешение: cards:read
Параметры: Карточка обращения| Параметр | Тип и расположение | Описание |
|---|
conversationIdОбязательный | string · path | UUID обращения PROChat из выбранного подключения. |
curl --fail-with-body \
--header "Authorization: Bearer ${PROCHAT_API_TOKEN}" \
"${PROCHAT_API_ORIGIN}/api/integration/v1/conversations/<ID_обращения>/card"
Пример ответа 200: Карточка обращения
{
"conversationId": "00000000-0000-4000-8000-000000000002",
"version": 0,
"tags": [
{
"name": "Тег из примера",
"color": "#6366f1",
"id": "00000000-0000-4000-8000-000000000003",
"revision": 0,
"archivedAt": null
}
],
"fieldDefinitions": [
{
"id": "00000000-0000-4000-8000-000000000004",
"name": "Сумма из примера",
"type": "NUMBER",
"options": [],
"revision": 0,
"archivedAt": null
}
],
"fieldValues": [
{
"fieldId": "00000000-0000-4000-8000-000000000004",
"value": 1000
}
]
}
Каталог тегов и полей
Возвращает активные определения тегов и полей всего рабочего пространства. Значения карточек и архивные определения в каталог не входят. Требуется cards:read; параметры запроса не принимаются.
Разрешение: cards:read
Параметры отсутствуют.
curl --fail-with-body \
--header "Authorization: Bearer ${PROCHAT_API_TOKEN}" \
"${PROCHAT_API_ORIGIN}/api/integration/v1/card-catalog"
Пример ответа 200: Каталог тегов и полей
{
"tags": [
{
"name": "Тег из примера",
"color": "#6366f1",
"id": "00000000-0000-4000-8000-000000000003",
"revision": 0,
"archivedAt": null
}
],
"fields": [
{
"id": "00000000-0000-4000-8000-000000000004",
"name": "Сумма из примера",
"type": "NUMBER",
"options": [],
"revision": 0,
"archivedAt": null
}
]
}
Квоты и ошибки
Лимит — 60 запросов на ключ и 600 на рабочее пространство в фиксированном минутном окне. Окно определяется UTC-временем сервера. Авторизованные попытки с неверным scope или параметрами также учитываются.
Дополнительно действует предел 1200 попыток за 60 секунд на IP до проверки токена. При HTTP 429 соблюдайте заголовок Retry-After в секундах. При недоступности обязательного ограничителя запрос получит 503. Ответы имеют Cache-Control: no-store.
Коды ошибок методов чтения| HTTP | Код | Действие |
|---|
| 400 | VALIDATION_ERROR | Неверный UUID, лимит, фильтр или неизвестный параметр запроса. |
| 400 | INVALID_CURSOR | Запись курсора отсутствует либо не входит в разрешённую выборку. |
| 401 | INTEGRATION_API_UNAUTHENTICATED | Ключ отсутствует, неверен, отозван, истёк или утратил актуальные права. |
| 403 | INTEGRATION_API_SCOPE_REQUIRED | Действующий ключ не содержит нужного разрешения. |
| 404 | CONNECTION_NOT_FOUND | Подключение фильтра отсутствует либо не выбрано для ключа. |
| 404 | CONVERSATION_NOT_FOUND | Обращение отсутствует либо выходит за область ключа. |
| 409 | INTEGRATION_API_RESULT_TOO_LARGE | Карточка или каталог превышает 1000 элементов одного списка; данные не обрезаются молча. |
| 429 | INTEGRATION_API_RATE_LIMITED | Превышен лимит IP, ключа или рабочего пространства. Соблюдайте Retry-After. |
| 500 | INTERNAL_ERROR | Внутренняя ошибка без раскрытия SQL, секретов и stack traces. |
| 503 | INTEGRATION_API_UNAVAILABLE | Обязательный ограничитель временно недоступен. Повторите запрос позднее. |
{
"code": "INTEGRATION_API_SCOPE_REQUIRED"
}
Не кешируйте секреты и ответы с перепиской. Последнее использование ключа в интерфейсе обновляется примерно раз в минуту и служит ориентиром активности.
Работа с вебхуками
- Настройте подписку на события нужного подключения во вкладке «Исходящие вебхуки».
- Проверьте HMAC-подпись исходных байтов запроса и исключите повторную обработку по ID события.
- Для события
conversation.card_changed получите conversation.id, затем прочитайте актуальную карточку через GET /conversations/{conversationId}/card с разрешением cards:read.
Секрет подписи вебхука и API-ключ — отдельные секреты. Вебхук содержит снимок на момент события, API возвращает актуальные сохранённые данные. Пауза рабочих отправок удерживает исходящие вебхуки; чтение API остаётся доступным.
В этой версии доступны сохранённые данные PROChat. Методы записи, провайдерская аналитика, объявления, файлы и готовые CRM-коннекторы расширяются отдельными задачами.
Настроить API-ключ