Bot Talk API
Bot Talk API - це REST API для спілкування з одним конкретним чатботом із вашого власного застосунку: власних додатків, внутрішніх інструментів або створених вами автоматизацій. Ви створюєте ключ API на вкладці бота API, після чого викликаєте кінцеву точку чату з ключем як токеном Bearer, щоб отримувати відповіді бота у вигляді окремої відповіді або через потокове передавання за допомогою SSE.
Початок роботи
- Виберіть свого чатбота та перейдіть на вкладку API у верхній частині сторінки бота (Select Bot > API (Виберіть бота > API)).
- Натисніть Create API Key (Створити ключ API).
Лічильник поруч із кнопкою показує, скільки ключів є активними ("1 of 5 API keys active"). Посилання View API Documentation (Переглянути документацію API) відкриває цю довідку, а фрагмент curl у Quick Start (Швидкий старт) надає готовий до виконання приклад.
- У діалоговому вікні Create API Key (Створити ключ API) вкажіть назву ключа, за бажанням налаштуйте білий список IP-адрес і ліміт запитів (rate limit), виберіть дозволи для нього, а потім натисніть Create (Створити).
- Скопіюйте повний ключ із вікна підтвердження успішного створення. Відкритий текст відображається лише один раз.
Ключ має вигляд ck_abcdefghijklmnopqrstuvwxyz012345. Кожен ключ прив'язаний до цього конкретного бота, тому кожен запит із цим ключем звертається саме до нього - бот ідентифікується за ключем і ніколи не з'являється в URL.
Базовий URL
https://api.chatlab.com/aichat
Усі кінцеві точки в цій статті наведені відносно цього базового URL.
Дозволи ключа
Кожен ключ має один або обидва дозволи, які налаштовуються перемикачами в діалоговому вікні Create API Key:
- Chat (send messages and receive responses) - дозволяє використовувати кінцеві точки
/v1/chatта/v1/chat/stream. - Conversation history (list and read past conversations) - дозволяє використовувати кінцеві точки
/v1/conversations.
На вкладці API надані кожному ключу дозволи відображаються у вигляді бейджів Chat та Conversations.
Автентифікація
Передавайте ключ у заголовку Authorization під час кожного запиту:
Authorization: Bearer ck_abcdefghijklmnopqrstuvwxyz012345
Запити без заголовка Authorization: Bearer ... повертають помилку 401 missing_api_key. Невідомі ключі повертають 401 invalid_api_key; відкликані ключі повертають 401 revoked_api_key. П'ять невдалих спроб за одну хвилину з однієї IP-адреси викликають блокування на 60 хвилин.
Ліміти
- До 5 активних ключів Bot Talk на одного бота
- До 60 запитів на хвилину на один ключ (алгоритм token bucket, місткість 60, плавне поповнення зі швидкістю 1 токен на секунду). Можна налаштувати в менший бік під час створення - встановіть нижче значення
rateLimitPerMinute, і ліміт знизиться, а швидкість поповнення пропорційно зміниться. - Максимальна довжина повідомлення - 4000 символів
- Одночасні потоки SSE на один ключ підпадають під обмеження вашого тарифного плану
Кінцеві точки
POST /v1/chat
Надіслати повідомлення боту й отримати повну відповідь у єдиній відповіді JSON.
Тіло запиту
{
"message": "Hi, can you help me track my order?",
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"metadata": {"userEmail": "alice@example.com"}
}
message- обов'язковий рядок, максимум 4000 символів.conversationId- необов'язковий UUID. Пропустіть його для нової розмови; передайте повторно значення, отримане раніше від сервера, щоб продовжити наявну розмову.metadata- необов'язковий об'єкт:{source, userName, userEmail, userPhone}. ПолеuserEmailтакож використовується для формування внутрішнього ідентифікатора клієнта.
Тіло відповіді (200)
{
"message": {"role": "assistant", "content": "Sure, what's your order number?"},
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"model": "gpt-4o-mini",
"usage": {"creditsUsed": 2},
"actions": []
}
message.roleзавжди має значення"assistant";message.contentмістить повний текст відповіді.model- ідентифікатор моделі, на якій працював бот для цього виклику.usage.creditsUsedвраховує повідомлення користувача + відповідь бота (зазвичай 2), плюс один додатковий кредит за кожен виконаний виклик інструменту.actionsперелічує виклики інструментів, виконані під час цієї взаємодії. Наразі генеруються лише записиfunction_call(із полямиtype,name,status: "completed").
POST /v1/chat/stream
Потоковий варіант /v1/chat. Повертає заголовок Content-Type: text/event-stream із Server-Sent Events.
Тіло запиту
Така ж структура, як і в POST /v1/chat. Прапорець stream у тілі не потрібен - сам цей шлях активує SSE.
Тіло відповіді (події SSE)
message.delta- фрагмент вмісту{ "content": "..." }. Передається послідовно в міру надходження токенів.action- виклик інструменту{ "type", "name", "status": "executing" }. Створюється, коли бот запускає виклик функції.message.done- завершальна подія з полямиconversationId,model,usageта (за наявності) списком завершених дійactions.error- надсилається в разі помилки генерації; після цього потік завершується.
Коментарі keep-alive для SSE (:keepalive) надсилаються кожні 15 секунд під час тривалих генерацій. Таймаути на стороні сервера: 30 секунд для першого токена, 120 секунд загалом на один потік.
Приклад curl
curl -N -X POST https://api.chatlab.com/aichat/v1/chat/stream \
-H "Authorization: Bearer ck_..." \
-H "Content-Type: application/json" \
-d '{"message":"hello"}'
GET /v1/conversations
Отримати список розмов для бота, прив'язаного до вашого ключа, з усіх джерел (віджет, WhatsApp, API тощо).
Параметри запиту
limit- від 1 до 100, за замовчуванням 20. Значення поза межами діапазону обмежуються граничними значеннями.cursor- непрозоре значення (opaque value), повернуте в поліnextCursorна попередній сторінці. Пропустіть його для першої сторінки.
Тіло відповіді (200)
{
"data": [
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2026-05-10T14:11:02Z",
"lastMessageAt": "2026-05-10T14:12:34Z",
"messageCount": 6,
"lastMessagePreview": "Thanks for the help."
}
],
"hasMore": false,
"nextCursor": null
}
lastMessagePreviewскорочується до 100 символів із додаванням суфікса....nextCursorмає значенняnullна останній сторінці; передайте його якcursor, щоб отримати наступну.
GET /v1/conversations/{conversation_id}
Повна історія розмови.
Тіло відповіді (200)
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2026-05-10T14:11:02Z",
"lastMessageAt": "2026-05-10T14:12:34Z",
"messageCount": 6,
"messages": [
{"role": "user", "content": "Hi", "createdAt": "2026-05-10T14:11:02Z"},
{"role": "assistant", "content": "Hello! How can I help?", "createdAt": "2026-05-10T14:11:03Z"}
]
}
Повертаються лише ролі user та assistant; службові системні (system) повідомлення та повідомлення інструментів відфільтровуються. Повертає помилку 404 not_found_error, якщо розмова не належить боту, прив'язаному до вашого ключа.
Щоб переглянути конфігурацію бота, використовуйте кінцеву точку Management API GET /v1/management/bots/{bot_id} із ключем Management.
Заголовки обмеження запитів (rate limit)
Відповіді, які дійшли до етапу перевірки лімітів (тобто автентифікація та перевірка IP-адреси за білим списком пройшли успішно), містять такі заголовки:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- ліміт для ключа, фактично застосований до цього виклику (60 за замовчуванням або встановлене вами нижче значенняrateLimitPerMinute).X-RateLimit-Remaining- залишок токенів у кошику одразу після цього виклику.X-RateLimit-Reset- час у форматі Unix epoch (у секундах), коли стане доступним наступний токен (це не повне скидання ліміту кошика; кошик поповнюється безперервно). Якщо кошик повний, тут вказується поточний час.
У відповідях 429 rate_limit_exceeded також повертається заголовок Retry-After, де вказано кількість цілих секунд до моменту, коли звільниться принаймні один токен.
Помилки до автентифікації (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) та 403 ip_not_whitelisted не містять заголовків X-RateLimit-* - лімітер опитується лише після успішної автентифікації та перевірки IP.
Формат помилок
Усі помилки мають єдину структуру відповіді:
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 12 seconds.",
"param": null
}
}
Типові коди HTTP:
400 invalid_request_error- некоректні вхідні дані (коди:invalid_parameter,unsupported_media_type)401 authentication_error- відсутній ключ (missing_api_key), невідомий ключ (invalid_api_key) або відкликаний ключ (revoked_api_key)402 quota_exceeded_error- вичерпано кредити на повідомлення403 permission_error- IP заблоковано (ip_blocked), IP немає в білому списку ключа (ip_not_whitelisted) або тип ключа не дозволяє доступ до цієї кінцевої точки (key_type_not_allowed,insufficient_permissions)404 not_found_error- розмова не належить цьому боту405 invalid_request_error(method_not_allowed) - неправильний метод HTTP для цього URL429 rate_limit_error- забагато запитів (rate_limit_exceeded) або забагато одночасних потоків (concurrent_streams_exceeded)500 api_error- внутрішня помилка
Пов'язані матеріали
Для виконання операцій на рівні акаунта (створення ботів, оновлення ботів, отримання статистики використання) перегляньте статтю Management API.