Справочник API

Интегрируйте enuchat в ваши системы с помощью Tenant API. Управляйте разговорами, отправляйте сообщения и получайте данные о биллинге программно.

Аутентификация

Все запросы к API аутентифицируются через API-ключ, передаваемый в заголовке X-Api-Key.

Получение API-ключа

  1. Перейдите в Настройки → API-ключи в панели управления
  2. Нажмите Создать API-ключ и дайте ему имя
  3. Скопируйте ключ сразу — он показывается только один раз
  4. Храните его безопасно (переменная окружения, менеджер секретов)

Выполнение запросов

Включайте ключ в каждый запрос:

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

Список разговоров, отсортированных по последнему сообщению.

Параметры запроса

ПараметрТипОписание
statusstringФильтр по статусу: open, pending, closed
widgetIdstringФильтр по UUID виджета
limitintegerМакс. результатов (по умолчанию 20, макс. 100)
offsetintegerПропустить 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}

Получить разговор со всеми сообщениями.

Параметры запроса

ПараметрТипОписание
limitintegerМакс. сообщений (по умолчанию 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"
}
ПолеТипОписание
contentstringОбязательно. Текст сообщения.
rolestringsystem (по умолчанию) или 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"
}
ПолеТипОписание
statusstringopen, pending или closed
assignedTostring|nullUUID оператора для назначения или 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-ключ за считанные минуты.

Начать бесплатно