Серверний API (REST v1) і MCP
REST-інтерфейс reactive.chat для бекенду: ключі й права API, обмеження частоти, формати відповідей і помилок, розбиття на сторінки, кінцеві точки проєктів, розмов, повідомлень, відвідувачів, подій, правил і hooks та сервер MCP для ШІ.
Серверний API призначений для вашого бекенду, а не для браузера: він не дозволяє CORS, а ключ API ніколи не має бути на вебсторінці чи в застосунку.
Основи
- База:
https://reactive.chat/v1/ - Версія: у шляху (
v1). У межах v1 поля додаються, але не видаляються; ігноруйте невідомі поля. - Формат: JSON, UTF-8. Час як ISO 8601 в UTC (
2026-10-21T08:15:30.123Z). ID виводяться як рядки ("id":"123"). - Заголовки відповіді:
Cache-Control: no-store, private,X-Content-Type-Options: nosniff. - Неіснуючий шлях повертає сторінку 404 (не JSON).
Ключі API
В обліковому записі в розділі Ключі API (/app/api-keys, лише власники й адміністратори). Ви задаєте назву й права; ключ (rc_live_ + 48 символів) показується рівно один раз, а ми зберігаємо лише хеш.
Права:
- лише читання —
read - читання й запис —
read,write - читання + дані відвідувача —
read,besucherdaten:lesen - читання, запис + дані відвідувача —
read,write,besucherdaten:lesen - лише імпорт даних клієнтів —
kundendaten:schreiben(Дані клієнтів)
Ключ належить рівно одному робочому простору; жоден шлях чи параметр не вибирає іншого. Він стає недійсним після відкликання або коли його автор більше не є власником чи адміністратором робочого простору. Строку дії немає — виконуйте ротацію самостійно (створіть новий, перейдіть на нього, відкличте старий).
Надсилання:
curl https://reactive.chat/v1/me -H "Authorization: Bearer rc_live_..."
Заголовок X-Api-Key: rc_live_... рівнозначний (читається лише за відсутності Authorization: Bearer).
Обмеження частоти
- 120 запитів за хвилину на ключ, фіксоване вікно вирівняне за початком хвилини. Рахується кожен запит, зокрема відхилений.
- Кожна відповідь містить
X-RateLimit-Limit,X-RateLimit-RemainingтаX-RateLimit-Reset(секунди до наступного вікна, а не позначка часу). - Понад ліміт: 429
rate_limitedізRetry-After. - Після 60 невдалих автентифікацій з адреси за 15 хвилин: 429 із
Retry-After: 900.
Формат відповіді
{ "data": { ... } }
Списки:
{ "data": [ ... ], "has_more": true, "next": { "before_id": "812" } }
Розбиття на сторінки: limit (стандартно 25, щонайбільше 100) і курсор — before_id для списків «спочатку нові», after_id для списків «спочатку старі». next є лише коли has_more дорівнює true. Загальної кількості немає.
Тіла POST/PUT: лише Content-Type: application/json (інакше 415), щонайбільше 65 536 байтів (інакше 413), об’єкт JSON із щонайбільше 32 рівнями.
Формат помилки
{ "error": { "code": "insufficient_scope", "message": "...", "required_scope": "write" } }
message — фіксоване англійське речення для розробників. Залежно від помилки додаються param, required_scope, max, allowed, reason. Повний перелік кодів:
- 400
bad_request,bad_json - 401
auth_required(немає ключа),auth_failed(недійсний або відкликаний) - 402
plan_required - 403
insufficient_scope,workspace_inactive - 404
not_found,conversation_not_found - 405
method_not_allowed(ізAllow) - 409
conversation_closed,import_disabled - 413
payload_too_large - 415
unsupported_media_type - 422
msg_too_long(ізmax) - 429
rate_limited - 500
internal, 501not_implemented, 503unavailable
Кінцеві точки
Обліковий запис
- GET /v1/me — окремі права не потрібні.
{ key: {id, name, scopes}, workspace: {id, name}, rate_limit: {requests, window_seconds} }. Підходить для перевірки ключа.
Проєкти (read)
- GET /v1/projects —
limit,before_id. Для кожного проєкту:id,name,domain,site_key,status,locale,created_at,updated_at,last_used_at. - GET /v1/projects/{id}
Розмови (read)
- GET /v1/conversations — спочатку нові. Фільтри
project_id,status(open,bot,waiting,assigned,closed),limit,before_id. Для кожної розмови:id,project_id,status,channel,visitor_id,session_id,assignee_id,csat_score,handoff_reason,created_at,updated_at,closed_at. - GET /v1/conversations/{id}
Повідомлення
- GET /v1/conversations/{id}/messages (
read) — спочатку старі,after_id,limit. Для кожного повідомлення:id,conversation_id,client_ulid,direction(inдо відвідувача,outвід відвідувача),author_type,author_id,kind,body,redacted,delivery_state,created_at; за наявностіcard,cards,form,form_reply,action,quick_replies,quick_reply_of. - GET /v1/messages (
read) — усі повідомлення робочого простору потоком, необов’язковийconversation_id,after_id,limit. Для збирання без вебхуків. - POST /v1/conversations/{id}/messages (
write) — записати повідомлення в розмову:
curl -X POST https://reactive.chat/v1/conversations/815/messages \
-H "Authorization: Bearer rc_live_..." \
-H "Content-Type: application/json" \
-d '{"body":"Your return has arrived.","author_type":"agent","client_ulid":"01JAB3C4D5E6F7G8H9JKMNPQRS"}'
- body (рядок, обов’язковий, щонайбільше 4000 символів)
- author_type (
agent|bot|system, стандартноagent) — не від імені відвідувача - client_ulid (ULID, необов’язковий) — для ідемпотентності: той самий ID повертає 200 із наявним повідомленням замість створення другого (уперше — 201).
- 409
conversation_closedдля закритої розмови, 422msg_too_long. - Примітка: записані так повідомлення зберігаються, але не доходять до зараз відкритого віджета негайно — лише під час наступної синхронізації. Для відповідей наживо використовуйте інструмент MCP
nachricht_senden(нижче).
Відвідувачі (read)
- GET /v1/visitors — живий список відвідувачів:
project_id,online(0/1),limit. Для кожного відвідувача, зокрема,online,consent,first_seen_at,last_active_at,visitor_id,page,pages_viewed,source(з UTM),device,country,language,returning,conversation. Додатковоdisabled_project_idsдля проєктів із вимкненим списком відвідувачів.
Події
- GET /v1/events (
read) —project_id,type,source(mp,rc,integration),after_id,limit. Для кожної подіїid,project_id,source,type,session_id,conversation_id,payload,created_at. - POST /v1/events (
write) — додати власну подію зі своєї системи до сеансу чи розмови:
{ "project_id": "123", "type": "bestellung.storniert",
"session_id": "s_...", "conversation_id": "01JAB...",
"payload": { "nummer": "2026-0815" }, "ts": 1792503600000 }
type відповідає ^[a-z][a-z0-9_.:-]{0,47}$, payload щонайбільше 8192 байти, ts у мілісекундах (щонайбільше 7 днів тому або 5 хвилин наперед). source завжди integration. Відповідь 201.
Правила (read)
- GET /v1/rules —
project_id. Для кожного проєктуsource(customабоdefault) іrules. Лише читання; редагування правил — у розділі Налаштування.
Hooks — див. Вебхуки: GET /v1/hooks, POST /v1/hooks, DELETE /v1/hooks/{id}.
Дані клієнтів — див. Дані клієнтів: PUT та DELETE /v1/kundendaten/{user_id}.
Приклад: збирання відкритих розмов
<?php
$key = getenv('RC_API_KEY');
$url = 'https://reactive.chat/v1/conversations?status=waiting&limit=100';
do {
$ch = curl_init($url);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $key]]);
$antwort = json_decode((string) curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($status === 429) { sleep(60); continue; }
foreach ($antwort['data'] as $g) { echo $g['id'], ' ', $g['created_at'], "\n"; }
$url = !empty($antwort['has_more'])
? 'https://reactive.chat/v1/conversations?status=waiting&limit=100&before_id=' . $antwort['next']['before_id']
: null;
} while ($url);
Сервер MCP
Для інструментів ШІ з підтримкою Model Context Protocol за тією самою базовою адресою є сервер MCP:
- Адреса:
POST https://reactive.chat/v1/mcp(Streamable HTTP, JSON-RPC 2.0, без стану, без пакетування). Точну адресу показано на сторінці Ключі API. - Автентифікація: той самий ключ API як
Authorization: Bearer; той самий ліміт частоти. - Версії протоколу:
2026-07-28(ізserver/discover; заголовкиMCP-Protocol-Version,Mcp-Methodі дляtools/call—Mcp-Nameобов’язкові), а також2025-11-25,2025-06-18та2025-03-26(ізinitialize). - Лише сервер: запити із браузерним
Originвідхиляються з 403.
Інструменти (tools/list показує лише дозволені вашому ключу):
- kb_suchen (
read) —projekt,frage(щонайбільше 500 символів),n(1–10, стандартно 5). Шукає в базі знань; щонайбільше 20 пошуків за хвилину на ключ. - gespraeche_auflisten (
read) —projekt,status,seit(час ISO),limit(щонайбільше 100),vor_id. - gespraech_lesen (
read) —id,limit(щонайбільше 200, стандартно 100). - nachricht_senden (
write) —gespraech,text(щонайбільше 4000 символів), необов’язковийals(електронна пошта оператора з правом відповідати в проєкті). Доставляє негайно як повідомлення оператора; асистент замовкає в цій розмові. - wissensluecken (
read) —projekt,stand(offen,erledigt,ignoriert),limit(щонайбільше 60).
Без besucherdaten:lesen ім’я, електронна пошта й телефон відвідувачів скорочуються, а персональні дані в текстах маскуються. Помилки інструментів надходять як isError: true з ідентифікаторами на кшталт project_not_found, conversation_not_found, conversation_closed, disabled, bad_argument, too_long, search_rate_limited.
Зразок запису для клієнта MCP:
{
"mcpServers": {
"reactive-chat": {
"url": "https://reactive.chat/v1/mcp",
"headers": { "Authorization": "Bearer rc_live_..." }
}
}
}
MCP і список відвідувачів — нові функції; їх можна вимкнути для окремого проєкту (тоді відповідний проєкт повідомляє disabled).
Чого немає
- Немає особистих токенів операторів і тестових ключів; усі ключі — ключі робочого простору
rc_live_. - Немає кінцевих точок для створення розмов, написання від імені відвідувачів чи зміни налаштувань проєктів, правил або бази знань.
- Немає CORS — API не призначений для браузерів.
Далі: Вебхуки · Інтеграції та канали
Оновлено: