Справочник API
Интегрируйте enuchat в ваши системы с помощью Tenant API. Управляйте разговорами, отправляйте сообщения и получайте данные о биллинге программно.
Аутентификация
Все запросы к API аутентифицируются через API-ключ, передаваемый в заголовке X-Api-Key.
Получение API-ключа
- Перейдите в Настройки → API-ключи в панели управления
- Нажмите Создать API-ключ и дайте ему имя
- Скопируйте ключ сразу — он показывается только один раз
- Храните его безопасно (переменная окружения, менеджер секретов)
Выполнение запросов
Включайте ключ в каждый запрос:
curl -H "X-Api-Key: tak_your_key_here" \
https://api.enuchat.com/api/v1/tenant-api/widgetsВсе ответы в формате JSON. Успешные ответы содержат поле data. Ошибки содержат поле error с code и message.
Безопасность: API-ключи хэшируются (SHA-256) в нашей базе данных. Мы никогда не храним исходный ключ. Обращайтесь с ключом как с паролем — не коммитьте его в код и не публикуйте.
Базовый URL
https://api.enuchat.com/api/v1/tenant-apiВсе endpoint ниже указаны относительно этого базового URL.
Endpoint
GET /widgets
Список всех виджетов вашего аккаунта.
Ответ
{'{'}
"data": [
{'{'}
"id": "019d19c6-7e0b-...",
"name": "Main Website Chat",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
Список разговоров, отсортированных по последнему сообщению.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
status | string | Фильтр по статусу: open, pending, closed |
widgetId | string | Фильтр по UUID виджета |
limit | integer | Макс. результатов (по умолчанию 20, макс. 100) |
offset | integer | Пропустить N результатов |
Пример
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"Ответ
{'{'}
"data": [
{'{'}
"id": "019d6724-000e-...",
"widgetId": "019d19c6-7e0b-...",
"visitorId": "v-abc123",
"visitorName": "John",
"visitorEmail": "john{'@'}example.com",
"visitorLanguage": "en",
"status": "open",
"assignedTo": null,
"lastMessageAt": "2026-04-11T14:30:00+00:00",
"startedAt": "2026-04-11T14:25:00+00:00"
}
]
}GET /conversations/{'{'}id}
Получить разговор со всеми сообщениями.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
limit | integer | Макс. сообщений (по умолчанию 50, макс. 200) |
Ответ
{'{'}
"data": {'{'}
"id": "019d6724-000e-...",
"visitorLanguage": "en",
"status": "open",
"messages": [
{'{'}
"id": "019d6724-1234-...",
"role": "visitor",
"content": "Hello, how much does it cost?",
"contentLanguage": "en",
"translatedContent": "Cześć, ile to kosztuje?",
"translatedLanguage": "pl",
"isAutoReply": false,
"createdAt": "2026-04-11T14:25:30+00:00"
},
{'{'}
"id": "019d6724-5678-...",
"role": "ai",
"content": "Our plans start at €19/month...",
"isAutoReply": true,
"createdAt": "2026-04-11T14:25:32+00:00"
}
]
}
}POST /conversations/{'{'}id}/messages
Отправить сообщение в разговор. Сообщение будет доставлено посетителю в реальном времени через чат-виджет.
Тело запроса
{'{'}
"content": "Thanks for reaching out! We'll process your request.",
"role": "system"
}| Поле | Тип | Описание |
|---|---|---|
content | string | Обязательно. Текст сообщения. |
role | string | system (по умолчанию) или operator |
Ответ (201 Created)
{'{'}
"data": {'{'}
"id": "019d6725-abcd-...",
"role": "system",
"content": "Thanks for reaching out!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{'{'}id}
Обновить статус или назначение разговора.
Тело запроса
{'{'}
"status": "closed"
}| Поле | Тип | Описание |
|---|---|---|
status | string | open, pending или closed |
assignedTo | string|null | UUID оператора для назначения или null для снятия |
GET /billing/balance
Получить текущий план и баланс кредитов.
Ответ
{'{'}
"data": {'{'}
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}Обработка ошибок
Ошибки возвращают код статуса не из диапазона 2xx с JSON-телом:
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| HTTP-статус | Значение |
|---|---|
401 | Недействительный, истёкший или отсутствующий API-ключ |
400 | Некорректное тело запроса или параметры |
404 | Ресурс не найден (или принадлежит другому аккаунту) |
500 | Ошибка сервера |
Типичные сценарии использования
Интеграция с CRM
Опрашивайте новые разговоры и синхронизируйте данные посетителей (имя, email, язык) в вашу CRM. Используйте ID разговора как внешнюю ссылку.
Автоматические повторные сообщения
После закрытия разговора отправьте повторное сообщение через API: "Спасибо за обращение! Можем ли мы ещё чем-то помочь?"
Альтернатива webhook
До появления исходящих webhook периодически опрашивайте endpoint разговоров для обнаружения новых сообщений или изменений статуса.
Массовые операции
Закрывайте все разговоры старше 7 дней, назначайте разговоры операторам на основе внешней логики или экспортируйте историю разговоров для аналитики.
Лимиты частоты запросов
API допускает до 60 запросов в минуту на API-ключ. При превышении лимита вы получите ответ 429 Too Many Requests. Подождите и повторите с экспоненциальной задержкой.
Готовы к интеграции?
Создайте бесплатный аккаунт и сгенерируйте API-ключ за считанные минуты.
Начать бесплатно