Довідник 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 StatusЗначення
401Недійсний, прострочений або відсутній API-ключ
400Недійсне тіло запиту або параметри
404Ресурс не знайдено (або він належить іншому тенанту)
500Помилка сервера

Поширені сценарії використання

CRM-інтеграція

Опитуйте нові розмови й синхронізуйте дані відвідувачів (ім'я, email, мова) зі своїм CRM. Використовуйте ID розмови як зовнішнє посилання.

Автоматичні follow-up

Після закриття розмови надішліть follow-up повідомлення через API: «Дякуємо за чат! Чи є ще щось, у чому ми можемо допомогти?»

Альтернатива webhook

Доки вихідні webhook-и недоступні, періодично опитуйте endpoint розмов, щоб виявляти нові повідомлення або зміни статусу.

Масові операції

Закривайте всі розмови, старіші за 7 днів, призначайте розмови операторам за зовнішньою логікою або експортуйте історію розмов для аналітики.

Обмеження частоти

API дозволяє до 60 запитів на хвилину на API-ключ. При перевищенні ви отримаєте відповідь 429 Too Many Requests. Зачекайте й повторіть з експоненційним відкатом.

Готові інтегрувати?

Створіть безкоштовний акаунт і згенеруйте API-ключ за лічені хвилини.

Почати безкоштовно